安卓系统。为什么会出现E/JavaBinder: FAILED BINDER TRANSACTION错误?

3

我读了很多关于这个错误的帖子,其中大部分与管理图像有关。

但是当我停止应用程序(放在后台)时,我会得到这个错误,所以应该与内存中的数据有关……

我的片段和活动的onStop()方法中没有做任何事情。

我已经检查了onSaveInstanceState(final Bundle outState)方法,bundle为空……?

我有5个对象ArrayList,并且通过测试我发现,如果我没有最大的一个,就不会抛出错误。

我的应用程序将拥有比现在更多的数据,所以这是个问题。

有人能解释一下我为什么会遇到这个问题以及我如何处理吗?

错误:

01-25 13:51:09.272 4940-4940/com.cathedralsw.schoolteacher
E/JavaBinder: !!! FAILED BINDER TRANSACTION !!!  (parcel size = 539984)

--------- beginning of crash
01-25 13:51:09.281 4940-4940/com.cathedralsw.schoolteacher E/AndroidRuntime: FATAL EXCEPTION: main
  Process: com.cathedralsw.schoolteacher, PID: 4940
  java.lang.RuntimeException: android.os.TransactionTooLargeException: data parcel size 539984 bytes
      at android.app.ActivityThread$StopInfo.run(ActivityThread.java:4039)
      at android.os.Handler.handleCallback(Handler.java:761)
      at android.os.Handler.dispatchMessage(Handler.java:98)
      at android.os.Looper.loop(Looper.java:156)
      at android.app.ActivityThread.main(ActivityThread.java:6595)
      at java.lang.reflect.Method.invoke(Native Method)
      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:942)
      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:832)
   Caused by: android.os.TransactionTooLargeException: data parcel size 539984 bytes
      at android.os.BinderProxy.transactNative(Native Method)
      at android.os.BinderProxy.transact(Binder.java:617)
      at android.app.ActivityManagerProxy.activityStopped(ActivityManagerNative.java:3632)
      at android.app.ActivityThread$StopInfo.run(ActivityThread.java:4031)
      at android.os.Handler.handleCallback(Handler.java:761)
      at android.os.Handler.dispatchMessage(Handler.java:98)
      at android.os.Looper.loop(Looper.java:156)
      at android.app.ActivityThread.main(ActivityThread.java:6595)
      at java.lang.reflect.Method.invoke(Native Method)
      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:942)
      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:832)
01-25 13:51:09.286 1795-5775/? E/ReportTools: This is not beta user build

“停止应用程序”具体是什么意思?“有人能解释一下为什么我会得到这个错误吗?”——通常,这是由于在保存的实例状态“Bundle”中放置了太多数据或通过“Intent”(例如对于“startActivity()”)传递了太多数据所导致的。 - CommonsWare
抱歉,我会更好地解释它。 - Alezis
我已经检查了 onSaveInstanceState(final Bundle outState) 方法,但是 bundle 是空的。安卓是如何管理它的? - Alezis
2个回答

8
您正在通过绑定器接口传输过多的数据。这可能是使用自定义绑定器界面并传递大对象,或者将额外信息附加到 Intent 中时发生(如果有很多对象,则大小会增加)。这可能发生在发送 Intent 或接收结果时。Binder 用于在 Android 中进行任何类型的跨进程通信,当启动相同应用程序中的活动时仍在使用。 Binder 在内部具有有限大小的缓冲区,因此大型事务可能会导致此类故障。
不要直接将您的数据放入 Intent 中,也不要直接将其传递给基于绑定器的方法调用,而是传递某种引用,接收方可以使用该引用访问日期。例如,发送存储在数据库或类似机制中的数据的 ID。

4
在我的情况下,问题是一个方法的无限循环(递归),导致栈溢出。

无限循环是我们的原因。 - undefined

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