java stopself_然后,即使我停止了服务,Context.startForegroundService()也没有调用Service.startForeground()...
所以我的應用程序有一些觸發服務和通知的遠程操作 . 在調用 startForegroundService 和服務嘗試啟動通知的時間之間,事情可能會發生變化,因此服務會再次檢查事物的狀態,然后決定要做什么 .
因此,如果我的服務決定它不需要運行,它將調用:
stopForeground(true);
stopSelf();
但由于某些原因,這似乎不起作用,因為我在進行這些調用后幾乎立即得到此異常 .
11-16 13:34:23.488 15099-15099/mypackage E/AndroidRuntime: FATAL EXCEPTION: main
Process: mypackage, PID: 15099
android.app.RemoteServiceException: Context.startForegroundService() did not then call Service.startForeground()
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1768)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loop(Looper.java:164)
at android.app.ActivityThread.main(ActivityThread.java:6494)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807)
那我怎么解決這個問題呢?
謝謝 .
編輯:
我創建了一個示例項目,當Activity啟動時它所做的就是調用 startForegroundService 然后它在服務上執行此操作:
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
Log.i(TAG,"start");
stopForeground(true);
stopSelf();
return super.onStartCommand(intent, flags, startId);
}
它崩潰了,無論我是否使用 stopForeground(true) .
編輯:這似乎解決了它,但似乎真的很丑,必須創建一個假通知只是為了取消它 .
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
Log.i(TAG,"start");
String CHANNEL_ID = "my_channel_01";
NotificationCompat.Builder mBuilder =
new NotificationCompat.Builder(this, CHANNEL_ID)
.setContentTitle("My notification")
.setContentText("Hello World!");
startForeground(-1,mBuilder.build());
stopForeground(true);
stopSelf();
return super.onStartCommand(intent, flags, startId);
}
總結
以上是生活随笔為你收集整理的java stopself_然后,即使我停止了服务,Context.startForegroundService()也没有调用Service.startForeground()...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: win7系统32位和64位的区别
- 下一篇: Win10切换窗口不流畅怎么办?Win1