2 votes

TransactionTooLargeException sur Samsung S7

L'une de mes applications génère l'exception suivante sur un Samsung 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)

Voici le code à la ligne 202 :

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

J'utilise également un Samsung S7 et je n'ai jamais eu cette erreur. Je ne peux pas non plus reproduire l'erreur avec l'émulateur ansdroid studio. Donc je ne sais pas comment réparer une erreur que je ne peux pas reproduire. Une idée ?

0voto

Max Elkin Points 71

La raison possible est que vous mettez à jour l'instance RemoteViews avant NotificationManager#notify au lieu d'en recréer une nouvelle, ce qui entraîne une fuite de mémoire. J'ai décrit ce cas dans une autre réponse

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X