三星 S7 上的 TransactionTooLargeException

Posted

技术标签:

【中文标题】三星 S7 上的 TransactionTooLargeException【英文标题】:TransactionTooLargeException on Samsung S7 【发布时间】:2018-05-28 12:57:03 【问题描述】:

我的一个应用在三星 S7 上引发以下异常:

java.lang.RuntimeException: 
at android.app.NotificationManager.notifyAsUser 
(NotificationManager.java:342)
at android.app.NotificationManager.notify (NotificationManager.java:292)
at android.app.NotificationManager.notify (NotificationManager.java:276)
at 
org.mypapp.test.service.NotificationReceiverRemoteViews.updateNotification 
(NotificationReceiverRemoteViews.java:202)
at org.mypapp.test.service.NotificationReceiverRemoteViews.onReceive 
(NotificationReceiverRemoteViews.java:63)
at android.support.v4.content.LocalBroadcastManager.executePendingBroadcasts 
(LocalBroadcastManager.java:308)
at android.support.v4.content.LocalBroadcastManager.access$000 
(LocalBroadcastManager.java:46)
at android.support.v4.content.LocalBroadcastManager$1.handleMessage 
(LocalBroadcastManager.java:118)
at android.os.Handler.dispatchMessage (Handler.java:102)
at android.os.Looper.loop (Looper.java:154)
at android.app.ActivityThread.main (ActivityThread.java:6642)
at java.lang.reflect.Method.invoke (Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run 
(ZygoteInit.java:1468)
at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:1358)
Caused by: android.os.TransactionTooLargeException: 
at android.os.BinderProxy.transactNative (Native Method)
at android.os.BinderProxy.transact (Binder.java:628)
at android.app.INotificationManager$Stub$Proxy.enqueueNotificationWithTag 
(INotificationManager.java:899)
at android.app.NotificationManager.notifyAsUser 
(NotificationManager.java:336)

这里是第 202 行的代码:

notificationManager.notify(NOTIFICATION_ID, mBuilder.build());

我也使用三星 S7,但从未遇到过该错误。我也无法使用 ansdroid studio 模拟器重现该错误。所以我不知道如何修复我无法重现的错误。 有什么想法吗?

【问题讨论】:

仍然没有答案 D: How to update Notification with RemoteViews?的可能重复 【参考方案1】:

可能的原因是您在 NotificationManager#notify 之前更新 RemoteViews 实例,而不是重新创建一个新实例,从而产生内存泄漏。我在another answer描述了这个案例

【讨论】:

这是什么意思?我们应该做 startForeground(ID, notification);而不是 NotificationManager.notify(ID, notification)?

以上是关于三星 S7 上的 TransactionTooLargeException的主要内容,如果未能解决你的问题,请参考以下文章

三星s7怎么退回安卓6.0

如何在三星galaxy s7上为React Native启用USB调试

如何为三星 S7 启用 USB 调试

三星 S7 不兼容,虽然 android 游戏控制台说设备受支持

如何避免三星设备的电池优化? (S6、S7 和 S8)

最佳智能手机TOP4出炉,三星Galaxy S7 edge位居榜首