【问题标题】:Broadcast of Intent has timed out via system broadcastIntent 广播已通过系统广播超时
【发布时间】:2021-01-18 17:31:13
【问题描述】:

在我的 Android 应用上,更改 LOCALE 时,我试图调用 JobIntentService 来防止 ANR,但在调用我的 BroadcastReceiver 之前,它就超时了(no ANR)。 p>

错误

E ActivityManager:原因:意图广播 { 行动=android.intent.action.LOCALE_CHANGED 标志=0x11200010 cmp=com.company.locale.LocaleChangeReceiver } 已通过系统超时 广播。

AndroidManifest.xml

<!-- Listen to locale change -->
        <receiver android:name="com.company.locale.LocaleChangeReceiver"
                  android:exported="false">
            <intent-filter>
                <action android:name="android.intent.action.LOCALE_CHANGED"/>
            </intent-filter>
        </receiver>

【问题讨论】:

    标签: android


    【解决方案1】:

    您不应将 android:exported 设置为 false。这将限制广播接收器的外部暴露。如果设置为 false,则接收器仅供 应用程序内部 使用。

    注意:此属性不是限制广播的唯一方法 接收器的外部暴露。您还可以使用权限来限制 可以向其发送消息的外部实体

    【讨论】:

    • 即使我将其更改为 android:exported="true" 也没有解决。我仍然通过系统广播超时。甚至来自 LocaleChangeReceiver.onReceive() 的第一行的日志也不会被打印出来。
    • 我猜你的 onReceive() 完成时间太长,导致这个错误。阅读本节developer.android.com/reference/android/content/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-27
    • 2011-09-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多