[英]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.