最近在项目中整理前人留下来的一系列遗留问题中发现了这样一个bug,下面来看打印信息:
android.os.TransactionTooLargeException
data parcel size 1743484 bytes
下面是打印栈信息
java.lang.RuntimeException:Failure from system
android.app.Instrumentation.execStartActivity(Instrumentation.java:1533)
......
Caused by:
android.os.TransactionTooLargeException:data parcel size 1743484 bytes
android.os.BinderProxy.transactNative(Native Method)
android.os.BinderProxy.transact(Binder.java:628)
android.app.ActivityManagerProxy.startActivity(ActivityManagerNative.java:3512)
android.app.Instrumentation.execStartActivity(Instrumentation.java:1526)
android.app.Activity.startActivityForResult(Activity.java:4389)
android.support.v4.app.h.startActivityForResult(BaseFragmentActivityJB.java:50)
android.support.v4.app.FragmentActivity.startActivityForResult(FragmentActivity.java:79)
android.support.v4.app.b.a(ActivityCompatJB.java:30)
android.support.v4.app.ActivityCompat.a(ActivityCompat.java:146)
android.support.v4.app.FragmentActivity.a(FragmentActivity.java:932)
android.support.v4.app.FragmentActivity$a.a(FragmentActivity.java:1047)
android.support.v4.app.Fragment.a(Fragment.java:940)
android.support.v4.app.Fragment.a(Fragment.java:929)
com.diibear.teacher.module.base.b.a(BaseFragment.java:133)
com.diibear.teacher.module.base.b.a(BaseFragment.java:149)
com.diibear.teacher.module.moment.fragment.PhotoFragment$b.handleMessage(PhotoFragment.java:215)
android.os.Handler.dispatchMessage(Handler.java:102)
android.os.Looper.loop(Looper.java:154)
android.app.ActivityThread.main(ActivityThread.java:6692)
java.lang.reflect.Method.invoke(Native Method)
com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1468)
com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1358)
根据信息我们定位到了具体的代码行数:
这时候我们再来看这个photoFragment.galleryModelList:
privateArrayListgalleryModelList;
这是一个存放相册Bitmap的list。
简单的介绍一下这个Activity的功能:调取相册里的照片显示,选择照片之后可以跳转预览Activity进行详情查看或者跳转编辑页面去上传照片。
这个错误发生在startActivity(intent)过程中,当我们启动Activity时,如果使用Bundle绑定过量的数据,就会发生这个异常。分析到这儿我心中也是千万头羊驼在奔跑,又是前人留下来的大坑等着我去填。
解决方案
优化代码,解决上述问题的关键是bundle中尽量不要存放太大的数据。
关于如何优化,下一篇我们重点去分析。