0

我的应用程序目标是每隔 20 分钟保存一次位置更新。

我使用了服务,它运行良好,但是当我锁定屏幕或自动锁定时,服务停止运行。当我解锁它时,服务再次运行。

突出显示我的代码:

服务()

onCreat(){
   call timer();
 }

timer(){
   code
 }

如何让我的代码在所有条件下始终运行?

4

2 回答 2

0

安排您的服务按计划完成工作(例如“调用 timer()”)(包括唤醒设备)的正确方法是使用AlarmManager, 可能与 myWakefulIntentService或类似的东西一起使用。

于 2010-05-22T15:10:27.343 回答
0

是的,使用 AlarmManager 每 10 分钟启动一次服务,例如使用下面的 setRepeating。摆脱服务中的计时器,让服务在 oncreate 或 onCommand 中运行任务开始完成。

    int SECS = 1000;
    int MINS = 60 * SECS;
    Calendar cal = Calendar.getInstance();
    Intent in = new Intent(context, YourService.class);
    PendingIntent pi = PendingIntent.getService(context, 0, in, PendingIntent.FLAG_UPDATE_CURRENT);

    AlarmManager alarms = (AlarmManager)context.getSystemService(
            Context.ALARM_SERVICE);
    alarms.setRepeating(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), 
            10 * MINS, pi);

您可以创建一个活动以在 onclick 处理程序中包含此代码,以从按钮启动服务。如果你想在启动时运行,你需要把它放在一个广播接收器中,当设备启动时会收到通知,但这本身就是另一个话题。

设备休眠时服务和计时器不起作用的原因是因为 cpu 已关闭并且您的代码没有唤醒锁定。AlarmManager 会稍微唤醒 CPU 以运行您的服务。

于 2011-01-06T07:00:59.817 回答