【问题标题】:Android. Why E/JavaBinder: FAILED BINDER TRANSACTION?安卓。为什么 E/JavaBinder: BINDER TRANSACTION 失败?
【发布时间】:2018-07-04 17:26:06
【问题描述】:

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

但是当我停止应用程序(置于后台)时出现此错误,因此应该与内存中的数据有关...

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

我检查了 onSaveInstanceState(final Bundle outState) 并且包是空的...¿?

我有 5 个对象的 ArrayList 并进行测试我意识到如果我没有最大的对象,则不会引发错误。

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

谁能解释一下我为什么会得到这个以及我必须如何处理这个??

错误:

01-25 13:51:09.272 4940-4940/com.cathedralsw.schoolteacher E/JavaBinder:!!! Binder 交易失败!!! (包裹大小= 539984)

                                                                     --------- beginning of crash 01-25 13:51:09.281 4940-4940/com.cathedralsw.schoolteacher E/AndroidRuntime: FATAL

例外:主要 进程:com.cathedralsw.schoolteacher,PID:4940 java.lang.RuntimeException:android.os.TransactionTooLargeException: 数据包大小 539984 字节 在 android.app.ActivityThread$StopInfo.run(ActivityThread.java:4039) 在 android.os.Handler.handleCallback(Handler.java:761) 在 android.os.Handler.dispatchMessage(Handler.java:98) 在 android.os.Looper.loop(Looper.java:156) 在 android.app.ActivityThread.main(ActivityThread.java:6595) 在 java.lang.reflect.Method.invoke(本机方法) 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:942) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:832) 引起:android.os.TransactionTooLargeException:数据包大小 539984 字节 在 android.os.BinderProxy.transactNative(本机方法) 在 android.os.BinderProxy.transact(Binder.java:617) 在 android.app.ActivityManagerProxy.activityStopped(ActivityManagerNative.java:3632) 在 android.app.ActivityThread$StopInfo.run(ActivityThread.java:4031) 在 android.os.Handler.handleCallback(Handler.java:761) 在 android.os.Handler.dispatchMessage(Handler.java:98) 在 android.os.Looper.loop(Looper.java:156) 在 android.app.ActivityThread.main(ActivityThread.java:6595) 在 java.lang.reflect.Method.invoke(本机方法) 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:942) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:832) 01-25 13:51:09.286 1795-5775/? E/ReportTools:这不是 beta 用户构建

【问题讨论】:

  • “停止应用程序”到底是什么意思? “谁能解释我为什么会得到这个” - 通常,这来自于在保存的实例状态Bundle 中放置了太多数据,或者在Intent 上传递了太多数据(例如,对于startActivity()).
  • 对不起,我会更好地解释它
  • 我检查了 onSaveInstanceState(final Bundle outState) 并且包是空的。 android是怎么管理的?

标签: java android performance


【解决方案1】:

您正在通过活页夹界面移动太多数据。如果使用自定义活页夹接口并传递大对象,或者如果您将附加内容附加到一个非常大的 Intent(或很多对象,因此大小加起来),则可能会发生这种情况。这可能是在发送 Intent 时或收到结果时。 Binder 用于 Android 中的任何类型的跨进程通信,并且在同一个应用程序中启动活动时仍然使用。 Binder 内部的缓冲区大小有限,因此大型事务可能会导致这样的失败。

与其将您的数据直接放入Intent,或者将其直接传递给基于活页夹的方法调用,不如传递某种引用,接收者可以使用该引用访问日期。例如,为存储在 DB 或类似机制中的数据发送一个 id。

【讨论】:

  • 感谢您的回答
【解决方案2】:

在我的情况下,问题是一个方法(递归)的无限循环,它使堆栈饱和。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-09-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-23
    • 2018-07-13
    • 1970-01-01
    • 2016-06-13
    相关资源
    最近更新 更多