远程服务异常在MIUI 11上导致我的应用程序崩溃

9

我开始收到关于MIUI 11设备(仅限Mi10和Mi10 Lite 5G)运行Android 11的奇怪的崩溃报告。我认为这是平台问题,与我的应用程序无关,因为它非常特定于小米Android 11。

Fatal Exception: android.app.RemoteServiceException
Bad notification(tag=null, id=3249) posted from package de.crysxd.octoapp, crashing app(uid=10334, pid=23788): Couldn't inflate contentViewsjava.lang.NullPointerException: Attempt to invoke virtual method 'android.app.Notification$MessagingStyle android.app.Notification$MessagingStyle.setConversationType(int)' on a null object reference

我知道如果在旧设备上使用SVG图标可能会出现类似的崩溃,但我已经使用了PNG。 设备显示的通知只有两种类型,一种是前台服务,另一种来自Firebase。从崩溃的时机来看,似乎不太可能是Firebase通知引起的。

这是我用来创建通知的代码 (完整代码):

private fun createProgressNotification(progress: Int, title: String, status: String) = createNotificationBuilder()
        .setContentTitle(title)
        .setContentText(status)
        .setProgress(maxProgress, progress, false)
        .setOngoing(true)
        .addCloseAction()
        .setNotificationSilent()
        .build()

    private fun createCompletedNotification(name: String?) = createNotificationBuilder()
        .setContentTitle(getString(R.string.notification_print_done_title))
        .apply {
            name?.let {
                setContentText(it)
            }
        }
        .setSound(RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION))
        .build()

    private fun createDisconnectedNotification() = createNotificationBuilder()
        .setContentTitle(getString(R.string.notification_printing_lost_connection_message))
        .setContentText(lastEta)
        .setProgress(maxProgress, 0, true)
        .addCloseAction()
        .setOngoing(false)
        .setNotificationSilent()
        .build()

    private fun createInitialNotification() = createNotificationBuilder()
        .setContentTitle(getString(R.string.notification_printing_title))
        .setProgress(maxProgress, 0, true)
        .setOngoing(true)
        .addCloseAction()
        .setNotificationSilent()
        .build()

    private fun createNotificationBuilder() = NotificationCompat.Builder(this, notificationChannelId)
        .setColorized(true)
        .setColor(ContextCompat.getColor(this, R.color.primary_light))
        .setSmallIcon(R.drawable.ic_notification_default)
        .setContentIntent(createStartAppPendingIntent())

有没有遇到相同的问题或知道解决方案?


我从同一台设备遇到了相同的问题,但我不知道这是哪里出了问题,你能重现吗? - georkost
不,我没有任何进展。我知道这与小米的Android 11更新有关。我不知道它是否特定于设备,或者会影响所有安装了Android 11的小米设备(让我们希望不会)。 - crysxd
谢谢您的回答,您可以看一下这里,我找到了这篇文章(https://piunikaweb.com/2021/01/25/android-11-update-bugs-issues-problems-tracker/),其中包含一个故障跟踪表。看起来他们确实在Android 11更新中遇到了通知问题。 - georkost
有关这个问题的任何消息吗?我的应用程序也受到了影响。 - Orange
还是崩溃了 :D - crysxd
2个回答

2

我的先前的回答被隐藏了。 将系统更新至MIUI 12.2.7后,出现了崩溃。 我的应用程序每秒钟都有一条更新通知,只有在应用程序运行一段时间后,有时才会发生崩溃。


我对这个答案有点困惑。能否有人解释一下为什么会发生这种情况,以及如何防止这种崩溃? - kotoMJ
不...不过我可以确认我有一个类似的设置。我的应用程序从一个前台服务显示一个长时间运行的通知(可能是几天)。所以也许这与此有关?我不知道...我觉得除了希望小米在他们的端修复这个问题外,我们没有太多可以做的了。 - crysxd

1

通过查看错误,应用程序崩溃是因为空指针异常。

Fatal Exception: android.app.RemoteServiceException
Bad notification(tag=null, id=3249) posted from package de.crysxd.octoapp, crashing app(uid=10334, pid=23788): 

Couldn't inflate contentViewsjava.lang.NullPointerException: Attempt to invoke virtual method 'android.app.Notification$MessagingStyle android.app.Notification$MessagingStyle.setConversationType(int)' 
on a null object reference

我建议您使用Log类来查找错误发生的行数。
现在,您可以将通知代码包装在try...catch块中,并在catch块中记录错误。这将防止应用程序崩溃,这是更好的选择。
这种方法将帮助您更好地理解问题并修复它,或者至少使其能够具有一些有限功能,这比让应用程序崩溃要好。

3
此代码是由系统调用的,而不是我的应用程序。它也仅适用于提到的小米Android版本。 - crysxd

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接