【问题标题】:Android says startForeground isn't being called even though it's the first line of onCreate()Android 说 startForeground 没有被调用,即使它是 onCreate() 的第一行
【发布时间】:2021-08-13 08:03:12
【问题描述】:

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

它有一个这样的 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 函数的顶部以避免此问题,但我们仍然看到崩溃。

编辑:这似乎只在华为设备上,所以也许这与它有关。

【问题讨论】:

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


【解决方案1】:

它不同步,可能是因为你的应用在主线程上做了太多的工作,让 oncreat 调用太慢。在调用 startForegroundService 5s(或其他秒)后发生此错误。

很容易检查原因,如果这个错误发生 100%,那是你的代码错误。 如果发生率低,则与机器状态有关。

【讨论】:

  • 我从未见过这种情况,它只是在我们为大量用户提供的崩溃报告中可见。
  • 所以不是因为你的代码有任何错误,只是因为不同设备的性能。唯一的办法就是尽快把startForegroundService放好
  • 是的,我几乎在第一行就有它,所以我不知道我还能做什么。
  • nothing.或者启动服务时不要做太多事情
  • 是的,我的意思是我已经这样做了。
猜你喜欢
  • 1970-01-01
  • 2016-09-12
  • 1970-01-01
  • 1970-01-01
  • 2021-12-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多