2015-11-14 481 views
0

我提出了一個關於保持服務活着的問題,但是我沒有找到解決方案,所以我有另一個更簡單的問題。START_STICKY無法正常工作

android doc說如果android在START_STICKY上返回的onStartCommand在低內存狀態下殺死一個服務,它會重新創建服務,如果我是正確的。

但是這個服務會在一段時間後在運行任務中被殺死並消失,但它並沒有被重新創建!我在手機上運行這個服務在Android 4.4.2上,當屏幕開啓時,它存活了大約20分鐘 但是當屏幕關閉時它會在大約3或4分鐘後消失......在我的平板電腦上(又是android 4.4.2)它停留更長時間,大約4或5個小時,然後再次消失(我在不同的測試中得到不同的結果)。我甚至在Android 5上測試它,結果類似於Android 4.4.2的平板電腦

我在這裏丟失了什麼?我認爲,當我們在使用回START_STICKY直到我打電話stopService

服務不會被摧毀

這裏是我的服務:

public class MyService extends Service { 
    @Override 
    public void onCreate() { 
     super.onCreate(); 
    } 

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

    @Override 
    public IBinder onBind(Intent intent) { 
     return null; 
    } 

    public void onDestroy() { 
     super.onDestroy(); 
    } 
} 

SRY的英語不好:)

+0

可能與問題[此處討論]有關(http://stackoverflow.com/questions/20636330/start-sticky-does-not-work-on-android-kitkat-edit-and-jelly-bean)。 –

+0

哪個設備測試過? – Nicks

回答

5

可能對someone--

有用

這個問題與設備與基於AOSP的ROM無關。所以Android 4.4.2版本不是問題。

所以有一些設備(華爲,LAVA,XIAOMI)隨機預裝啓動管理器或節能器,並且它們運行在定製的android ROM上。所以這些設備通常不會提供粘性服務。

所以可能的選擇是實現像看門狗定時器一樣的東西,並檢查兩者之間的服務,如果沒有啓動,服務可以再次運行。儘管可能會影響電池消耗。

+2

Thx這樣一個很棒的提示,這正是我的小米redmi音符3專業版運行android 5.1的問題! – xyman