描述:首页activity 里用fragment 和view pager显示数据,viewpger adapter填充数据过大,首页正常显示,当actiity处于后台两三秒(如跳转actvity,按home键)便会引发TransactionTooLargeException。而且只在7.0以上会引发,6.0没有任何问题。请问这是什么鬼?
java.lang.RuntimeException: android.os.TransactionTooLargeException: data parcel size 3625220 bytes
at android.app.ActivityThread$StopInfo.run(ActivityThread.java:3982)
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:6523)
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 3625220 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:3974)
... 7 more
Intent里放的东西太多了造成的
intent携带数据通过Binder传递,实测Binder携带数据上限大约500多kb,不同系统上限不同,activity间大数据量传值最好不要通过intent
确实是binder传递数据量太大,从日志来看parcel将对象转换成字节用于传递时太大了,可以重写parcel接口生成字节数据的逻辑,把一些不重要的字段舍弃掉。
如果是同进程界面跳转时候出现的这个问题,可以将数据共享到文件中,到下一界面取出生成对象,避免跨进程或者界面跳转时候一次性传输大量数据导致异常
onSaveInstanceState方法中保存的数据量太大了导致的,activity到后台时候,去做了保存数据的操作,结果数据量太大,就崩溃了