2014-01-11 39 views
0

我有一個相當好奇的問題。我有一個無界限的服務,我打電話時使用下面的代碼從我的主要活動調用。服務不會被殺無論如何

//some code checks if the service is awake. if not then the code below is called   
Intent serviceIntent = new Intent(this, SMS_Listener_Service.class); 
startService(serviceIntent); 

當一個新的短信進來經由定時器的服務等待3秒鐘,以確保內容觀察者已保存的數據到內部SMS分貝。之後它會打電話給一個intentservice來完成繁重的工作。

不知什麼原因,該服務有時會掛起,並停留在「重啓(見圖片)」

好奇的是,即使試圖強制停止在應用部分不工作的服務。它瞬間消失,然後再次出現相同的信息。在代碼中使用stopService不起作用,並且服務中的OnDestroy方法永遠不會被調用。唯一的辦法是重新啓動手機。

問題是,當它處於這種狀態時,它不起作用。(它的意思解析收到的短信)

我與Android 4.3

「在GALAXY NOTE 3運行此Hanging Service

我懷疑Intentservice做的實際分析沒有完成,因此服務停止調用的調用從不會被調用。

我的問題是,有沒有強制一個intentservice已停止停止的方式?

這是在服務啓動命令的代碼

public int onStartCommand(Intent intent, int flags, int startId) { 
    super.onStartCommand(intent, flags, startId); 

    if (!blnAutoSyncisEnabled) { 
     stopSelf(); 
     return 0; 
    } else { 
     return START_STICKY; 

    } 

} 

同一個問題的更詳細視圖這裏https://stackoverflow.com/posts/21077517/edit

+0

作爲一個開始,我已經將服務中的所有代碼都包含在異常返回中的try catch中,以便服務可以優雅地停止自我 – KuriaNdungu

回答

0

這可能不是一個非常優雅的解決方案,但你可以直接在服務的onCreate()調用stopSelf()方法並在致電super.onDestroy()之前處理onDestroy()中的實際操作。

我有一個類似的問題,我這樣固定。也許這也會解決你的問題。祝你好運。 ;)

+0

謝謝。我試圖做到這一點,但發現當Service處於Restarting模式時,onDestroy方法未被調用。檢查服務是否運行導致「真實」,但試圖阻止它拒絕工作。再次感謝您的建議。 – KuriaNdungu