我遇到了這個問題,但我沒有找到任何解決問題的方法。PendingIntent正在查殺服務
我正在建立一個服務,必須在特定的時間做一些事情,所以我有一個AlarmManager來計數定時器。
我開始從活動服務,通過getBaseContext().startService(intent)
,我有AlarmManager爲mAlarm.set(AlarmManager.ELAPSED_REALTIME_WAKEUP, SystemClock.elapsedRealtime() + TIME, mPendingIntent);
The PedingIntent is: mPendingIntent = PendingIntent.getBroadcast(getBaseContext(), 0, new Intent(filter), 0);
我註冊本地接收器爲以下幾點:registerReceiver(mReceiver, new IntentFilter(filter));
我的問題面對的是:服務正常運行,沒有錯誤,但如果我從「最近的應用程序」中刪除我的應用程序,服務將保持運行,直到AlarmManager觸發我的PendingIntent。它在隨機時間(可能是幾秒或幾分鐘)後崩潰,重新啓動並且不再崩潰。
該服務正在前臺運行。
請記住:該服務不會立即崩潰,它只會在我的AlarmManager觸發我的PendingIntent(應該調用我的BroadcastReceiver)時崩潰。
我不知道它爲什麼會發生,是否有一些標誌可以設置在PendingIntent上?如果我剛剛打開我的應用程序並將其保留,然後將我的應用程序從「最近」刪除,我的服務再次崩潰,可以說服務「倖存」了。
是否有另一種方法可以用來完成喚醒設備的定時器任務以及AlarmManager?
當我從最近的窗口中刪除我的應用程序或類似的東西時,是否有任何偵聽器事件或意圖操作可以過濾?類似於isAppRemovedFromRecents()
或isAppTrullyDiesFromTheSystem()
。這樣我可以使用接收器重新啓動我的服務。
我也想過爲服務製作第二個應用程序,這樣我就可以避免所有這個問題,但它看起來並不「正確」。
我該怎麼辦?
編輯
過濾器的值:String filter = "com.mypackage.TIMERFILTER";
的logcat:Scheduling restart of crashed service com.mypackage/.MyService in 5000ms
在此先感謝
什麼是「過濾器」的值時,你創建'PendingIntent'? –
另外,當你的服務崩潰時,你應該在logcat中看到stacktrace的錯誤。請在你的問題中發佈。 –
@DavidWasser我更新了我的問題:) –