2010-05-21 104 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或類似的東西類似。