我的申请目标是每次保存位置更新,比方说,20分钟。
我使用过服务并且工作正常,但当我锁定屏幕或自动锁定时,服务停止运行。 当我解锁时,服务再次运行。
突出显示我的代码:
服务()
onCreat(){
call timer();
}
timer(){
code
}
如何让我的代码在所有条件下始终运行?
答案 0 :(得分:0)
安排您的服务按计划进行工作的正确方法(例如,“呼叫计时器()”),包括唤醒设备,是使用AlarmManager
,可能与我{一起使用{3}}或类似的东西。
答案 1 :(得分: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以运行您的服务。