2016-06-27 96 views
0

一些問題從official doc關於Android服務生命週期

只有當內存不足時,它必須恢復系統資源用於具有用戶焦點的活動的Android系統將強制停止服務。如果該服務被綁定到具有用戶焦點的活動,那麼它不太可能被殺害

當服務確實是由系統終止,是onStop()onDestroy()被調用?

考慮下面的代碼片段:

public class MyService extends Service { 

    int count = 0; 

    @Override 
    public int onStartCommand(Intent intent, int flags, int startId) { 
     count++; 
     return START_STICKY; 
    } 

    ... 
} 

通過onStartCommand()返回START_STICKY,我想爲MyService會被系統殺死後重新創建自身內存不足的情況。每次重新創建MyService時,計數值是否會重置爲0?

回答

5

當一個服務確實被系統殺死,onStop()或onDestroy()會被調用嗎?

沒有onStop()可用於Service。使用onDestroy()可能會或可能不會調用Service

每次重新創建MyService時,計數的值是否會重置爲0?

是的。

+0

我的不好,'onStop()'確實不存在於Service上。 「onDestroy()」意味着什麼可能會或可能不會被調用?是否有某種方法可以確保在這種低內存情況下總是會調用onDestroy()? –

+1

@HendraAnggrian:否。首先,如果系統RAM的需求是非常高的優先級(例如來電),Android將不會花時間執行'onDestroy()',因爲這可能需要很長時間。其次,內存不足並不是您的流程終止的唯一原因。例如,如果用戶在設置中的應用程序屏幕上按下強制停止,則直接終止您的進程,而不會在正在運行的組件上調用onDestroy()。 'onDestroy()'用於輕量級清理,但不要依賴它。 – CommonsWare

+0

給你,先生,我說謝謝你。 –