java - 安卓。为什么 E/JavaBinder : FAILED BINDER TRANSACTION?

标签 java android performance

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

但是当我停止应用程序(置于后台)时出现此错误,所以应该考虑内存中的数据......

我没有在 fragment 和 Activity 的 onStop() 中执行任何操作。

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

我有 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

最佳答案

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

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

关于java - 安卓。为什么 E/JavaBinder : FAILED BINDER TRANSACTION?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48443286/

相关文章:

android - 未触发屏幕锁定的 BroadcastReceiver

android - 如何在android中显示饼图

python - 两个 numpy 数组的每对列之间的差异(如何更有效地做到这一点)?

performance - 在 Julia 中,是否有宏来确定是否可以在解析时评估表达式?

Java——最高效的匹配方法

java - 无法解析的日期 : "2018-08-02T14:24:40.040353"

java - Oracle JDK 7 和 JRE 7 认证系统配置的真正含义是什么?

Java 流 : difference between forEach and forEachOrdered

进行简单的 sql 查询时,Java vs PHP

android - 数据库测试失败 Robolectric 2.4 + Ubuntu 14 + GradleWrapper 2.4