java - 致命异常 : android. app.RemoteServiceException 从包发布的错误通知

标签 java android push-notification

我在 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。

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

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

关于java - 致命异常 : android. app.RemoteServiceException 从包发布的错误通知,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46806086/

相关文章:

android - 在 Android NDK r8b 下编译 STXXL

java - 字符串中的字符减法

java - 在 Spring Boot 应用程序的 WebSocketConfigurer 中使用 @PathParam(javax.websocket.server.PathParam)

java - 陷入 while 循环/索引越界异常

安卓一次性密码(OTP)用户注册/开户

ios - 来自 iOS 的 Firebase 云消息传递和多主题订阅失败

android - 使用 OneSignal 发送通知黑白设备

node.js - 从nodejs服务器发送推送通知

java - 未找到类 : Could not load com. microsoft.sqlserver.jdbc.Nanos

java - 断言等于精度