簡體   English   中英

Android服務重啟無法正常工作

[英]Android service restarting not working

我已經建立了一項服務,可以將計時器數據廣播到各種活動中。 通常它可以正常運行而不會出現問題,但是當android重新啟動它時,有時會無法正常工作。

它還具有三個廣播接收器:

1-屏幕關閉事件:為了停止廣播計時器數據並在Alarmanager中為服務何時結束設置警報,因此我將能夠播放結束通知供用戶參加。

2-屏幕事件:為了繼續廣播計時器數據。 我還取消所有待處理的警報。

3-警報接收器。 如屏幕1所述,通常會在屏幕關閉時觸發。

我的服務從startForeground開始,並返回START_REDELIVER_INTENT。 由於開始意圖具有初始計時器日期,因此我可以毫無問題地重新創建服務狀態。 廣播警報接收器和onStartCommand共享相同的句柄意圖例程,以啟動或繼續該服務。

所有這些都完美。 對於短計時器(<30分鍾),我沒有發現任何問題。 屏幕可以打開,關閉,也可以從打開到關閉以及從關閉到打開同時更改。 活動也可以在前面或后面。 我要弄弄那些所有可能的狀態。 在所有情況下,我的服務和活動均正常。

我的問題來自某個計時器更長的時間(> 30分鍾,通常我設置為35分鍾)。 有時由於內存原因,Android會殺死我的服務。 沒關系,據我所知,Android這樣做是為了改善用戶體驗。 問題是當我轉到“設置/應用程序/服務”時,我可以看到我的服務處於“正在重啟”狀態。 我懷疑這意味着Android尚未啟動它,並且已被擱置。 它顯示了很長一段時間的狀態(我還沒有耐心說,如果它再改變半小時以上...。)

問題是,在那種狀態下,這種狀態可能永遠長久(我一直在研究它,並且該服務從未啟動),計時器(在我的手表中)達到了超時,警報管理器啟動了我的意圖,但是作為我的服務尚未開始,並且廣播尚未注冊,我無法讓工作人員超時(播放通知)。 因此用戶不知道服務計時器已結束,這是一個嚴重的問題。

非常好奇。 由於該服務在經過30分鍾的幾乎所有運行中均被終止,而其他服務未終止。

我的問題是:到底發生了什么? 我如何正確處理這種情況以檢測警報是否正確觸發,或者甚至更重要:如何強制我的服務正確重新啟動?

要添加一些幫助數據:

  • 我的服務與其他服務相比確實擁有很少的內存,並且也不會運行長時間的操作,它僅在屏幕打開時使用handler.postdelayed(“ sendUpdatesToUI”,250),而在屏幕關閉時則不使用任何內容,僅等待alarmmanager發送超時意圖。

  • 到達時間后,用戶打開活動,它從服務接收了計時器數據廣播意圖,並且看到到達時間,則停止了服務。

  • 我了解並接受用戶可以在需要時終止服務,我接受。 這里的問題不是用戶,而是Android重新啟動服務。

  • 服務終止后,不會調用onDestroy。

  • 使用2.3.4版本。

經過大量調查,我找到了解決問題的方法。 這一切都與startForeGround函數有關。 我正在使用:

startForeground(0,不是);

盡管這看起來不錯,並且在網絡上的許多示例中都可以找到,但是正確的方法不是使用0,而是使用其他任意隨機值:

startForeground(2765,不是),

這樣就解決了問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM