我有一项服务可以跟踪向用户交付的状态。
它有一个像这样的 onCreate 方法:
override fun onCreate() {
super.onCreate()
job = Job()
// We must always start foreground as otherwise we can get crashes
startForeground(
NOTIFICATION_ID,
createNotification(deliveryTrackerUseCase.statusData.value)
)
deliveryTrackerListener.setListeningIfNecessary(true)
wakeLock =
powerManager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "DeliveryTrackerService::lock")
combine(
deliveryTrackerUseCase.statusData,
orderUpdatesRepository.orderUpdatesEnabled
) { trackerStatus, updatesEnabled ->
if (updatesEnabled) {
notificationManager.notify(NOTIFICATION_ID, createNotification(trackerStatus))
}
}.launchIn(coroutineScope)
}
但是我仍然在 firebase crashlytics 中看到以下崩溃:
Fatal Exception: android.app.RemoteServiceException: Context.startForegroundService() did not then call Service.startForeground(): ServiceRecord{4f65483 u0 com.example.engine.DeliveryTrackerService}
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2389)
at android.os.Handler.dispatchMessage(Handler.java:110)
at android.os.Looper.loop(Looper.java:219)
at android.app.ActivityThread.main(ActivityThread.java:8393)
at java.lang.reflect.Method.invoke(Method.java)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:513)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1055)
我到底该怎么做才能阻止这种崩溃?这用于在协程范围内设置通知,但我已将其移至 onCreate 函数的顶部以避免此问题,但我们仍然看到崩溃。
编辑:这似乎只在华为设备上,所以也许这与它有关。
最佳答案
它不同步,可能是因为您的应用程序在主线程上做了太多工作,并且让 oncreat 调用太慢。此错误发生在调用 startForegroundService 5 秒(或其他秒)后。
检查原因很容易,如果这个错误100%发生,那就是你的代码错误。 如果发生率较低,则与机器状态有关。
关于Android 说 startForeground 没有被调用,即使它是 onCreate() 的第一行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68768792/