【问题标题】:Fatal Exception: android.app.RemoteServiceException Bad notification posted from package致命异常:android.app.RemoteServiceException 从包发布的错误通知
【发布时间】:2017-10-18 08:43:58
【问题描述】:

我在 Play 商店中有一个应用程序,我会定期使用 android 工具更新和依赖项更新来更新它,但仅此而已。 我只是确保它可以编译并使用最新的 Android 平台和支持库。

我不添加任何功能或任何东西。

最近我收到了很多关于 ActivityThread.java 的崩溃消息:

Fatal Exception: android.app.RemoteServiceException
Bad notification posted from package xxx.xxx.xxx: Couldn't create icon: StatusBarIcon(pkg=gxxx.xxx.xxxsuser=0 id=0x7f03002d level=0 visible=true num=0 )

我的应用确实收到了通知,我为此使用了对讲 SDK,它是这样注册的

Intercom.client().setupGCM(token, R.mipmap.notification_icon);

基本上我自己不会拦截通知,我只是使用 AsyncTask 来请求 GCM 令牌,仅此而已。

根据我得到的报告,现在看来,每次生产应用程序收到通知时,它都会默默地无法创建通知并使应用程序崩溃。

在 Android 3.0 和 compileSDK 26 版本之前,我没有遇到这个问题。 我没有更改处理通知的代码,也没有更改 Intercom SDK 版本。

我有没有提到我自己无法复制这个问题,在我的手机上进行调试和生产构建时,我可以很好地收到通知。

但是我在野外遇到了很多这样的崩溃。除非将数千条通知发送到同一个应用程序,否则您可以这样做。

但它似乎集中在搭载 Android 7 的三星手机上。但不仅如此。

我想,我希望我不是唯一一个遇到这个问题的人,我敢打赌,APK 生成或支持库发生了一些我不知道的变化。如果您有任何线索,将不胜感激。

【问题讨论】:

    标签: java android push-notification


    【解决方案1】:

    AS 3.0 使用新的 gradle 版本。在我的应用程序中,我遇到了同样的问题。这是由新的资源 ID 引起的。如果您比较由不同 gradle 版本生成的 R.java 文件,您可以看到相同的资源具有不同的 ID。就我而言,我使用 DevToDev SDK 来接收推送消息。我在 MainActivity 中初始化 SDK 并传递通知中使用的资源,显然,如果用户在更新后不启动应用程序,则通知中使用的资源会有旧的 ID。这会导致应用程序崩溃。我还没有解决我的问题,我可以为您提供解决的唯一方法是使用 BroadcastReceiver 来捕获应用程序更新事件

    <receiver android:name=".AppUpdateBroadcastReceiver"  android:exported="true">
            <intent-filter>
                <action android:name="android.intent.action.MY_PACKAGE_REPLACED"/>
            </intent-filter>
        </receiver>
    

    并在那里初始化您的 SDK。

    如果您想解决这个问题,可以尝试执行以下步骤:

    1. 安装旧版应用,启动它并确保通知正常工作
    2. 从 AS 安装 apk 后禁用自动启动
    3. 安装新版本的应用(使用新的 gradle 版本构建),但不要启动它
    4. 向您的设备发送测试通知

    【讨论】:

      猜你喜欢
      • 2018-06-18
      • 1970-01-01
      • 1970-01-01
      • 2014-09-18
      • 1970-01-01
      • 2018-03-28
      • 2018-06-15
      • 2014-10-08
      相关资源
      最近更新 更多