2012-12-15 194 views
4

我有一個BroadcastReceiver服務,它通過「exampleMethod()」方法與活動進行通信。此服務啓動並正常工作,但過了一段時間它被Android停止,我必須重新啓動它。可以確保服務很長一段時間不會停止?Android服務意外關閉

public class SMS_Service extends Service{ 
    private BroadcastReceiver rec_sms = new BroadcastReceiver() { 
     @Override 
     public void onReceive(Context context, Intent intent) { 
       MainActivity.exampleMethod(); 
     } 
    }; 

    @Override 
    public int onStartCommand(Intent intent, int flags, int startId) { 
     // We want this service to continue running until it is explicitly 
     // stopped, so return sticky. 
     return START_STICKY; 
    } 

回答

3

過了一會服務是由Android停止

的事項的第一件事情是,爲什麼你的服務是由Android系統停止,

當用戶直接交互與該進程的一個組件(這是一個活動),Android會盡力保持該進程的運行,除非在特殊情況下,否則不會看到它被殺死。

  • 如果是由於內存不足,則無法完成任何操作。當爲內存殺死某些東西時,整個過程(包括應用程序對象)都會被終止,並且此時不會執行任何代碼。

  • 如果服務因爲不再需要運行而被銷燬,它的onDestroy()將被調用,並且在稍後需要該服務時會創建一個新實例並調用onCreate()。

是否有可能確保該服務沒有停止很長一段時間 ?

這是不可能的。您可以通過startForeground()獲得最近的結果,但即使這樣也不能保證您的服務將永遠活着。

此外,這是Android中的一個嚴重的反模式。用戶討厭試圖永遠運行的應用程序,這就是爲什麼我們必須與任務殺手等相抗衡的原因。