我在 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 token ,仅此而已。
现在,根据我收到的报告,似乎每次生产应用收到通知时,它都会默默地创建通知失败并导致应用崩溃。
在 Android 3.0 和 compileSDK 26 版本之前,我没有遇到这个问题。 我没有更改处理通知的代码,也没有更改 Intercom SDK 版本。
我有没有提到我自己无法重现这个问题,在我的手机上同时进行调试和生产构建时,我可以很好地收到通知。
但我在野外遇到了很多这样的崩溃。正如您可以做到的,除非向同一个应用程序发送了数千条通知。
但它似乎集中在搭载 Android 7 的三星手机上。但不仅如此。
我想我希望我不是唯一遇到此问题的人,我敢打赌 APK 生成或我不知道的支持库中发生了一些变化。如果您有任何线索,我们将不胜感激。
最佳答案
AS 3.0 使用新的 gradle 版本。在我的应用程序中,我遇到了同样的问题。这是由新的资源 ID 引起的。如果比较不同 gradle 版本生成的 R.java 文件,您会发现相同的资源具有不同的 ID。就我而言,我使用 DevToDev SDK 来接收推送消息。我初始化 SDK 并在 MainActivity 中传递通知中使用的资源,显然,如果用户在更新后不启动应用程序,通知中使用的资源将有旧 ID。这会导致应用程序崩溃。我还没有解决我的问题,我可以为您提供的唯一解决方法是使用 BroadcastReceiver 来捕获应用程序更新事件
<receiver android:name=".AppUpdateBroadcastReceiver" android:exported="true">
<intent-filter>
<action android:name="android.intent.action.MY_PACKAGE_REPLACED"/>
</intent-filter>
</receiver>
并在那里初始化您的 SDK。
如果您想替换这个问题,您可以尝试执行以下步骤:
- 安装旧版本的应用程序,启动它并确保通知正常工作
- 从 AS 安装 apk 后禁用自动启动
- 安装新版本的应用(使用新的 gradle 版本构建),但不要启动它
- 向您的设备发送测试通知
关于java - 致命异常 : android. app.RemoteServiceException 从包发布的错误通知,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46806086/