【问题标题】:How to make Android Service run even when the device is not awake?即使设备未唤醒,如何使 Android 服务运行?
【发布时间】:2010-05-21 22:38:34
【问题描述】:
我的应用程序目标是每隔 20 分钟保存一次位置更新。
我使用了服务,它工作正常,但是当我锁定屏幕或自动锁定时,服务停止运行。
当我解锁它时,服务再次运行。
突出显示我的代码:
服务()
onCreat(){
call timer();
}
timer(){
code
}
如何让我的代码在所有条件下始终运行?
【问题讨论】:
标签:
android
android-service
android-location
【解决方案1】:
是的,使用 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);
您可以创建一个 Activity 以将该代码包含在从按钮启动服务的 onclick 处理程序中。如果您想在启动时运行,您需要将它放在广播接收器中,以便在设备启动时收到通知,但这本身就是另一个主题。
设备休眠时服务和计时器不起作用的原因是 cpu 已关闭并且您的代码没有唤醒锁。 AlarmManager 会稍微唤醒 cpu 以运行您的服务。