首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >重复服务设计

重复服务设计
EN

Stack Overflow用户
提问于 2016-06-28 12:41:27
回答 1查看 42关注 0票数 0

我在我的应用程序中有以下设计:我有一个活动设置重复警报,启动接收器启动我的服务。每一分钟。在我的服务中,我设置了Start Sticky,但是一旦Android决定关闭我的服务,我就无法让它重新启动。这是Android 4.4.2。这是我的代码:

代码语言:javascript
复制
public class MainActivity extends AppCompatActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    AlarmManager am = (AlarmManager) getSystemService(ALARM_SERVICE);
    Intent i1 = new Intent(MainActivity.this, AlarmReceiver.class);
    PendingIntent pi = PendingIntent.getBroadcast(MainActivity.this, 0, i1, PendingIntent.FLAG_UPDATE_CURRENT);
    am.setRepeating(AlarmManager.RTC_WAKEUP, 0, 60 * 1000, pi);
}

这是接收器

代码语言:javascript
复制
    public void onReceive(Context arg0, Intent arg1) {
    // For our recurring task, we'll just display a message
    Log.d(Constants.TAG, "Starting Service");
    Intent intent = new Intent(arg0, MyLocationService.class);
    arg0.startService(intent);
}

和服务:

代码语言:javascript
复制
private static PowerManager.WakeLock wl;
private static OkHttpClient client;
@Nullable
@Override
public IBinder onBind(Intent intent) {
    return null;
}

@Override
public int onStartCommand(Intent intent, int flags, int startId) {
    Log.d(Constants.TAG, "Service onStartCommand");
    PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
    wl = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, Constants.TAG);
    wl.acquire();
    client = new OkHttpClient();
    new GetLocation(MyLocationService.this).execute();
    return START_STICKY;
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-06-28 14:27:37

您很可能会看到与电源管理和警报的交互。从API 19开始,所有警报在默认情况下都是不准确的,因此它们将与其他警报进行核对。此外,一旦设备进入低功率状态,只要接收器执行其BroadcastReceiver方法,警报就被传送到onReceive() s,并且设备保证保持清醒。一旦从该方法返回(以及与警报相关的任何其他BroadcastReceiver ),设备将立即再次进入低功耗状态。由于您的应用程序之前已被杀死,Service不再运行,将不会得到CPU的时间。

解决这一问题的方法是使用一个WakefulReceiver,它在运行onReceive()时使用一个唤醒锁,启动Service进行处理。然后,Service将在完成处理时释放唤醒锁。本文将给您一个很好的解释:http://po.st/7UpipA

请注意,每分钟醒来都会严重降低设备的电池寿命,因此您应该考虑将其取消。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38076577

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档