我的应用程序的目标是保存位置更新,比如说20个小时。即使设备没有唤醒,如何使Android服务运行?
我使用的服务,它工作正常,但当我锁定屏幕或自动锁定服务停止运行。 当我解锁它时,服务再次运行。
亮点在我的代码:
服务()
onCreat(){
call timer();
}
timer(){
code
}
如何使我的代码运行在所有条件下所有的时间?
我的应用程序的目标是保存位置更新,比如说20个小时。即使设备没有唤醒,如何使Android服务运行?
我使用的服务,它工作正常,但当我锁定屏幕或自动锁定服务停止运行。 当我解锁它时,服务再次运行。
亮点在我的代码:
服务()
onCreat(){
call timer();
}
timer(){
code
}
如何使我的代码运行在所有条件下所有的时间?
是的,使用AlarmManager以每10分钟启动一次服务,例如像下面的setRepeating。摆脱服务中的计时器,让服务在创建或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以运行您的服务。
安排您的服务按计划进行工作的正确方法(例如,“call timer()”),包括唤醒设备,是使用AlarmManager
,可能与我的WakefulIntentService
或类似的东西类似。