2010-05-21 71 views
0

我的应用程序的目标是保存位置更新,比如说20个小时。即使设备没有唤醒,如何使Android服务运行?

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

亮点在我的代码:

服务()

onCreat(){ 
    call timer(); 
} 

timer(){ 
    code 
} 

如何使我的代码运行在所有条件下所有的时间?

回答

0

是的,使用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以运行您的服务。

0

安排您的服务按计划进行工作的正确方法(例如,“call timer()”),包括唤醒设备,是使用AlarmManager,可能与我的WakefulIntentService或类似的东西类似。