Android 说 startForeground 没有被调用,即使它是 onCreate() 的第一行

标签 android android-service foreground-service crashlytics-android

我有一项服务可以跟踪向用户交付的状态。

它有一个像这样的 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/

相关文章:

Android - Foreground 在 Oreo 中不工作。操作系统在一段时间后终止服务

Android 即时应用程序 : Foreground service

java - 杀死并重新启动应用程序后前台服务未停止 - Android Studio

java - 如何在另一个 Activity 中使用一个 Activity 中的方法?

android - 为什么我的 ServiceConnection 方法从未执行过?

java - ORMLite 外国集合 : Must use ClosableIterator?

android - 即使在前面运行,如何强制停止启动的进程?

android - 定期将数据从服务发送到绑定(bind) Activity

android - HTC One 漏洞?出现在 URLConnection InputStream 中的部分 HTTP header

c# - MvxListView 不像普通的 xamarin ListView 那样流畅