我的活動通過致電startservice()
啓動服務。爲了簡化我的問題,可以說服務是一個計數器,並且計數器會每10秒增加一次。當手機沒有被充電時,應用程序的服務會停止
Timer t_counter;
int counter = 0;
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
t_counter = new Timer();
t_counter.schedule(new TimerTask() {
@Override
public void run() {
counter++;
Log.d("counter: ",Integer.toString(counter));
}}, 0, 10000);
return Service.START_STICKY;
}
當手機正在充電時(或在調試模式 - 因爲我能看到的Logcat
)服務工作正常。在大約每10秒鐘,Logcat
顯示調試信息,每當應用程序在後臺或不。但是當我拔掉電話時,服務會在一段時間後停止運行。應用程序(啓動服務的活動)處於活動狀態時的事件。請注意,服務沒有被破壞,只是擱置,或類似的東西。
因爲當我再次插入手機時,計時器會繼續,並且計數器的值將從剛剛拔下手機的值增加。所以如果服務已經被破壞,那麼價值將再次爲零。 (也是我調試服務的生命週期,並且看不到onStartCOmmand()
,onDestroy()
會被調用)
我已經搜索瞭解決方案,但我認爲我沒有對此行爲的正確答案。 我知道我應該使用AlarmManager
而不是Timer。或者,如果我通過startForeground()
將服務foreground或單獨的process解決此問題,它也會起作用。但我想知道爲什麼我的解決方案正在充電。我在哪裏可以找到有關服務「閒置」狀態的信息。 (不執行計時器時間表,但不會被破壞)謝謝!
那麼我的問題與充電有關嗎?所以當拔掉電源時,系統會停止服務? (不會破壞) – HiB 2013-02-17 18:16:37
當手機使用電池供電時,系統可能會嘗試保留資源。如果你的應用程序不聽'充電狀態',我沒有看到任何其他連接。 – iTech 2013-02-17 18:21:37
那麼我在哪裏可以找到有關此服務狀態的信息?沒有被銷燬只是放在「閒置」,也許它運行,如果應用程序在前臺,我會測試它 - 如果是這樣,它可能與進程連接,因爲應用程序和服務運行在同一個進程,如果沒有定義其他進程服務 – HiB 2013-02-17 18:27:36