Android系统。为什么E / JavaBinder:FAILED BINDER TRANSACTION?

时间:2018-01-25 12:47:52

标签: java android performance

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

但是当我停止应用程序(放入后台)时,我收到此错误,所以应该关注内存中的数据......

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

我已经检查了onSaveInstanceState(最终的Bundle outState)并且捆绑包是空的......¿?

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

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

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

错误:

  

01-25 13:51:09.272 4940-4940 / com.cathedralsw.schoolteacher   E / JavaBinder:!!!失败的粘合剂交易! (包裹大小=   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)                                                                                    at java.lang.reflect.Method.invoke(Native Method)                                                                                    在   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)                                                                                    at java.lang.reflect.Method.invoke(Native Method)                                                                                    在   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用户构建

2 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:0)

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