异常处理篇之TransactionTooLargeException

android.os.TransactionTooLargeException

android.os.TransactionTooLargeException: data parcel size 725216 bytes

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
android.os.TransactionTooLargeException: data parcel size 725216 bytes
at android.os.BinderProxy.transactNative(Native Method)
at android.os.BinderProxy.transact(Binder.java:506)
at android.app.ApplicationThreadProxy.scheduleLaunchActivity(ApplicationThreadNative.java:852)
at com.android.server.am.ActivityStackSupervisor.realStartActivityLocked(ActivityStackSupervisor.java:1385)
at com.android.server.am.ActivityStackSupervisor.startSpecificActivityLocked(ActivityStackSupervisor.java:1490)
at com.android.server.am.ActivityStack.resumeTopActivityInnerLocked(ActivityStack.java:2081)
at com.android.server.am.ActivityStack.resumeTopActivityLocked(ActivityStack.java:1594)
at com.android.server.am.ActivityStackSupervisor.resumeTopActivitiesLocked(ActivityStackSupervisor.java:2959)
at com.android.server.am.ActivityStack.completePauseLocked(ActivityStack.java:1087)
at com.android.server.am.ActivityStack.activityPausedLocked(ActivityStack.java:975)
at com.android.server.am.ActivityManagerService.activityPaused(ActivityManagerService.java:6932)
at android.app.ActivityManagerNative.onTransact(ActivityManagerNative.java:542)
at com.android.server.am.ActivityManagerService.onTransact(ActivityManagerService.java:2631)
at android.os.Binder.execTransact(Binder.java:453)

问题原因

Intent内携带的数据过大

解决方法

  1. 将传递的信息封装在一个静态的类中,或则封装在跳转对象的一个静态属性中,效率高,但是耦合性也高!(这种方法在stackoverflow网站看到的,有兴趣可以点击查看详情)

    1
    2
    3
    4
    Intent intent = new Intent(this,SecondActivity.class);
    DataSave.setValue(value);//将value设置到静态类DataSave中
    //SecondActivity.value = value;//或则将value设置到SecondActivity的静态属性中
    startActivity(intent);
  2. 将传递的信息做本地存储,如SP存储、数据库等,然后在跳转对象中取出来,不会提高程序的耦合性,但是效率较低。
    存储实体类,首先可以使用Gson将实体转为json串(可以使用new Gson().toJson()方法),然后进行存储,最后在跳转对象中取出再利用Gson转为实体即可(可以使用new Gson().fromJson()方法)。

坚持原创技术分享,您的支持是对我最大的鼓励!