[Android]项目中遇到的bug:android.os.TransactionTooLargeException

最近在项目中整理前人留下来的一系列遗留问题中发现了这样一个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)

根据信息我们定位到了具体的代码行数:

[Android]项目中遇到的bug:android.os.TransactionTooLargeException_第1张图片

这时候我们再来看这个photoFragment.galleryModelList:

privateArrayListgalleryModelList;

[Android]项目中遇到的bug:android.os.TransactionTooLargeException_第2张图片

这是一个存放相册Bitmap的list。

简单的介绍一下这个Activity的功能:调取相册里的照片显示,选择照片之后可以跳转预览Activity进行详情查看或者跳转编辑页面去上传照片。

这个错误发生在startActivity(intent)过程中,当我们启动Activity时,如果使用Bundle绑定过量的数据,就会发生这个异常。分析到这儿我心中也是千万头羊驼在奔跑,又是前人留下来的大坑等着我去填。

解决方案

优化代码,解决上述问题的关键是bundle中尽量不要存放太大的数据。

关于如何优化,下一篇我们重点去分析。

你可能感兴趣的:([Android]项目中遇到的bug:android.os.TransactionTooLargeException)