我有一个例外,它在Android 7上发生了很多,而在下面的版本上却很少。我不知道如何重现它,我只看到有关崩解剂的报道。
我并不真正在活动之间或与服务之间传递数据。我确实在我的一个活动的onSaveInstanceState
方法上保存了一些WebView的状态,但我已经这样做多年了,我不知道为什么它会突然引起问题。
有什么想法吗?
这是一个例外:
Fatal Exception: java.lang.RuntimeException: android.os.TransactionTooLargeException: data parcel size 1405624 bytes
at android.app.ActivityThread$StopInfo.run(ActivityThread.java:4156)
at android.os.Handler.handleCallback(Handler.java:751)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6682)
at java.lang.reflect.Method.invoke(Method.java)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1520)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1410)
Caused by android.os.TransactionTooLargeException: data parcel size 1405624 bytes
at android.os.BinderProxy.transactNative(Binder.java)
at android.os.BinderProxy.transact(Binder.java:628)
at android.app.ActivityManagerProxy.activityStopped(ActivityManagerNative.java:4149)
at android.app.ActivityThread$StopInfo.run(ActivityThread.java:4148)
at android.os.Handler.handleCallback(Handler.java:751)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6682)
at java.lang.reflect.Method.invoke(Method.java)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1520)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1410)
感谢。
答案 0 :(得分:3)
烨!从Android 7.0(牛轧糖)the system will crash if the data in onSaveInstanceState
is too large开始。
你必须想出另一种保存和恢复状态的方法。
http://blog.sqisland.com/2016/09/transactiontoolargeexception-crashes-nougat.html
请注意Dianne Hackborn的评论:
Dianne Hackborn 2016年9月18日上午10:52
它比固定大小限制更复杂。每个过程都有一个 用于接收传入事务的固定缓冲区,大小为1MB。 从技术上讲,你可以说最大尺寸是1MB,但这是假设的 没有其他IPC发生。在实践中,你永远不应该 一个接近那个的大小,或者偶尔冒险 当有许多其他并发的IPC正在进行时失败。
对于已保存状态的特定情况,您还希望保持此小 因为这里提供的是系统需要保留的数据 只要用户可以导航,就可以在系统进程中使用 回到那个活动(即使活动的过程被杀死)。
所以我建议保持保存状态低于100K,并且 真的不到50K,而且在大多数情况下甚至远低于此。