RemoteServiceException:startForeground的错误通知:java.util.ConcurrentModificationException

问题描述 投票:4回答:1
android.app.RemoteServiceException: Bad notification for startForeground: java.util.ConcurrentModificationException
  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2204)
  at android.os.Handler.dispatchMessage(Handler.java:108)
  at android.os.Looper.loop(Looper.java:166)
  at android.app.ActivityThread.main(ActivityThread.java:7523)
  at java.lang.reflect.Method.invoke(Method.java:-2)
  at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:245)
  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:921)

我已经收到这份崩溃报告很长一段时间了。似乎这只发生在Android 8.0.0上。

@Synchronized
override fun toForeground(id: Int) {
    fun action() {
        startForeground(id, builder?.build())
    }
    if (Looper.myLooper() === Looper.getMainLooper()) {
        action()
    } else {
        Handler(Looper.getMainLooper()).post { action() }
    }
}

每个频道都已设置好,应用程序可以在Android 8.0.0及更高版本的设备上运行,测试期间没有任何问题,除非我无法重现崩溃。

我想知道为什么会发生这种崩溃以及如何解决它。

提前致谢。

android android-service
1个回答
2
投票

我也随机在Android 8.0.0设备上面对此崩溃。

查看AOSP源代码,它似乎来自这一行:http://androidxref.com/8.0.0_r4/xref/frameworks/base/services/core/java/com/android/server/am/ServiceRecord.java#540

public void postNotification() {
...
} catch (RuntimeException e) {
    Slog.w(TAG, "Error showing notification for service", e);
    // If it gave us a garbage notification, it doesn't
    // get to be foreground.
    ams.setServiceForeground(name, ServiceRecord.this,
            0, null, 0);
    ams.crashApplication(appUid, appPid, localPackageName, -1,
            "Bad notification for startForeground: " + e);
}

不确定此catch块上方的try块中的哪一行会导致它,但我假设AOSP本身存在错误。它以异步方式运行通知。因此,当AOSP对其进行操作时应用程序更新其通知的可能性非常高。

© www.soinside.com 2019 - 2024. All rights reserved.