我的应用程序目标是每隔 20 分钟保存一次位置更新。
我使用了服务,它运行良好,但是当我锁定屏幕或自动锁定时,服务停止运行。当我解锁它时,服务再次运行。
突出显示我的代码:
服务()
onCreat(){
call timer();
}
timer(){
code
}
如何让我的代码在所有条件下始终运行?
我的应用程序目标是每隔 20 分钟保存一次位置更新。
我使用了服务,它运行良好,但是当我锁定屏幕或自动锁定时,服务停止运行。当我解锁它时,服务再次运行。
突出显示我的代码:
服务()
onCreat(){
call timer();
}
timer(){
code
}
如何让我的代码在所有条件下始终运行?
安排您的服务按计划完成工作(例如“调用 timer()”)(包括唤醒设备)的正确方法是使用AlarmManager
, 可能与 myWakefulIntentService
或类似的东西一起使用。
是的,使用 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 以运行您的服务。