随机抛出android.os.TransactionTooLargeException

Mil*_*ilo 11 android parcelable

我看到来自我的一个实时应用程序的相当多的错误报告,导致这个异常:

java.lang.RuntimeException: Adding window failed
   at android.view.ViewRootImpl.setView(ViewRootImpl.java:513)
   at android.view.WindowManagerGlobal.addView(WindowManagerGlobal.java:259)
   at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:69)
   at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:2852)
   at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2250)
   at android.app.ActivityThread.access$800(ActivityThread.java:135)
   at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1196)
   at android.os.Handler.dispatchMessage(Handler.java:102)
   at android.os.Looper.loop(Looper.java:136)
   at android.app.ActivityThread.main(ActivityThread.java:5017)
   at java.lang.reflect.Method.invokeNative(Method.java)
   at java.lang.reflect.Method.invoke(Method.java:515)
   at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
   at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
   at dalvik.system.NativeStart.main(NativeStart.java)

Caused by: android.os.TransactionTooLargeException
   at android.os.BinderProxy.transact(Binder.java)
   at android.view.IWindowSession$Stub$Proxy.addToDisplay(IWindowSession.java:683)
   at android.view.ViewRootImpl.setView(ViewRootImpl.java:502)
   at android.view.WindowManagerGlobal.addView(WindowManagerGlobal.java:259)
   at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:69)
   at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:2852)
   at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2250)
   at android.app.ActivityThread.access$800(ActivityThread.java:135)
   at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1196)
   at android.os.Handler.dispatchMessage(Handler.java:102)
   at android.os.Looper.loop(Looper.java:136)
   at android.app.ActivityThread.main(ActivityThread.java:5017)
   at java.lang.reflect.Method.invokeNative(Method.java)
   at java.lang.reflect.Method.invoke(Method.java:515)
   at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
   at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
   at dalvik.system.NativeStart.main(NativeStart.java)
Run Code Online (Sandbox Code Playgroud)

从我在这里读到的内容来看,我认为原因可能会太大,Parcelable我会增加Intent额外的内容.我正在将一个Object从一个Activity传递给另一个Activity,在该Objects writeToParcel方法中我保存了一个JSON字符串,其大小范围为1000-1500个字符.这可能是原因吗?

在测试应用程序时,我有时会注意到UI滞后,好像内存不足,冻结然后强行关闭.

使用静态变量将Object从一个Activity传递到另一个Activity会不会更好?或者这可能是完全由其他东西引起的?

谢谢

Nem*_*vic 3

是的,这很可能是由太大的 Parcelable 引起的,确切地说,太大的对象图无法作为 Parcelable 发送。根据我的经验,如果您要传输大型图形,那么最好使用 java 序列化,这与您在 SO 和一般情况下在其他地方获得的建议几乎相反。公平地说,它比通过 Parceler lib 使用 Parcelable 更好,我从未使用过纯 Parcelable。有关更多详细信息,请参阅我关于此主题的博客文章。