即使设备没有唤醒,如何让Android服务运行?

时间:2010-05-21 22:38:34

标签: android android-service android-location

我的申请目标是每次保存位置更新,比方说,20分钟。

我使用过服务并且工作正常,但当我锁定屏幕或自动锁定时,服务停止运行。 当我解锁时,服务再次运行。

突出显示我的代码:

服务()

onCreat(){
   call timer();
 }

timer(){
   code
 }

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

2 个答案:

答案 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以运行您的服务。