我的應用程序的目標是保存位置更新,比如說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
或類似的東西類似。