簡體   English   中英

當具有START_STICKY的stopSelft()時,Android服務自動重啟

[英]Android service auto restart when stopSelft() with START_STICKY

我有一個用於推送通知的服務,即使我的應用程序關閉或被殺死(從最近的應用程序中清除,...),該通知也必須在后台運行。 我用這個:

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

但是我也有一個BroadcastReceiver,當設備與網絡斷開連接時,它將在服務類中調用stopSelf() 僅當我使用return START_NOT_STICKY ,此接收器才能工作,否則該服務將自動重新啟動。

所以問題是:如何將stopSelf()return START_STICKY一起使用? 調用stopSelf() ,不得重新啟動該服務,而應在stopSelf()主進程時重新啟動該服務。

謝謝閱讀。

//編輯:我試圖在AndroidManifest.xml中為服務使用單獨的進程:

<service android:name="com.mypackage.name.MyService"
    android:launchMode="singleTop"
    android:process=":myservice" />

並使用START_NOT_STICKY ,但是服務進程仍然與主進程一起被殺死。

問題1:

如何在返回START_STICKY時使用stopSelf()? 您可以嘗試在接收器中收到廣播時嘗試執行以下操作:若要重新啟動服務,請返回START_NOT_STICKY,然后調用stopSelf()。

問題2:

如果分配給該屬性的名稱以冒號(':')開頭,則該新進程專用於應用程序。 如果進程名稱以小寫字母開頭,則該服務將在具有該名稱的全局進程中運行,前提是它具有這樣做的權限。 因此,我建議您更改一個名稱android:process =“ your custom name”。

暫無
暫無

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

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