android.os.TransactionTooLargeException 随机抛出

12

我看到了我的一个实时应用程序中出现了不少错误报告,原因是这个异常:

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)

根据我在这里阅读的内容,我认为问题可能是因为我正在向Intent附加一个过大的Parcelable。我目前正在将一个对象从一个Activity传递到另一个Activity,在该对象的writeToParcel方法中,我正在保存一个JSON字符串,其长度范围为1000-1500个字符。这可能是原因吗?

在测试应用程序时,有时会注意到UI卡顿,就像内存不足一样,然后强制关闭。

是否最好使用静态变量从一个Activity传递对象到另一个Activity,或者这可能是由其他原因引起的?

谢谢

3个回答

3

是的,这很可能是由于太大的Parcelable导致的,具体来说是太大的对象图无法作为Parcelable发送。根据我的经验,如果你要传输大的对象图,最好使用Java序列化,而这基本上与你在SO和其他地方得到的建议完全相反。公正地说,这比使用Parceler库的Parcelable要好,我从未使用过纯Parcelable。有关详细信息,请参见我在此主题上的博客文章


1
你覆盖了吗?
onSaveInstanceState()

如果你检查保存的内容,可能会出现错误。 例如,如果你执行

操作。
outState.putParcelable("key", outState); //Error is passing the bundle

1

1
我认为限制是1Mb。 - Arash GM
@Arash - 哦!- 我想你说得对- 根据这个资源:http://developer.android.com/reference/android/os/TransactionTooLargeException.html - Saeid
很好的回答,但下次请引用您复制的文本1:1。 - JacksOnF1re

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