【问题标题】:Onesignal crash on boot with Android O使用 Android O 启动时 Onesignal 崩溃
【发布时间】:2025-12-05 19:00:02
【问题描述】:

使用 Android 0(在我的情况下为 DP4)和 3.5.8 版本的 SDK,每次启动设备时都会崩溃。

崩溃如下:

原因:

    java.lang.IllegalStateException: Not allowed to start service Intent { cmp=com.frandroid.app/com.onesignal.NotificationRestoreService (has extras) }: app is in background uid UidRecord{c74919a u0a125 RCVR idle procs:1 seq(0,0,0)}
 at android.app.ContextImpl.startServiceCommon(ContextImpl.java:1505)
 at android.app.ContextImpl.startService(ContextImpl.java:1461)
 at android.content.ContextWrapper.startService(ContextWrapper.java:644)
 at android.content.ContextWrapper.startService(ContextWrapper.java:644)
 at android.support.v4.content.WakefulBroadcastReceiver.startWakefulService(WakefulBroadcastReceiver.java:100)
 at com.onesignal.BootUpReceiver.onReceive(BootUpReceiver.java:42)
 at android.app.ActivityThread.handleReceiver(ActivityThread.java:3252)
 at android.app.ActivityThread.-wrap17(Unknown Source:0) 
 at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1677) 
 at android.os.Handler.dispatchMessage(Handler.java:105) 
 at android.os.Looper.loop(Looper.java:164) 
 at android.app.ActivityThread.main(ActivityThread.java:6541) 
 at java.lang.reflect.Method.invoke(Native Method) 
 at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240) 
 at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767)

此崩溃与 Android O / 8.0 有关。

【问题讨论】:

    标签: android onesignal


    【解决方案1】:

    这个问题已经在One signal issues问过了

    @jkasten2 答案:

    // Add snapshots repo if you don't have it already
        repositories {
            maven { url "https://oss.sonatype.org/content/repositories/snapshots" }
        }
    
    
    compile 'com.onesignal:OneSignal:4.0.0-SNAPSHOT'
    

    他还提到:

    根据其他人的反馈和我们自己的测试,Beta 版一直很稳定。我们正在完成最终测试,并准备在下周某个时间发布。

    尽管@Swati 解决了核心问题。

    更新:

    OneSignal 团队已关闭该票证,以下是修复(在one signal documentation 中更新):

    dependencies {
        compile 'com.onesignal:OneSignal:[3.6.0, 3.99.99]'
    }
    

    【讨论】:

      【解决方案2】:

      WakefulBroadcastReceiver 在 Android O 中已弃用 -

      “从接收到广播开始服务通常是不安全的,因为您无法保证您的应用此时处于前台并因此被允许这样做。”

      您可能需要查看https://developer.android.com/preview/behavior-changes.html#back-all

      【讨论】: