TransactionTooLargeException仅限牛轧糖

时间:2018-01-02 14:24:50

标签: android

01-02 14:06:06.184 3742-5073/? E/JavaBinder: !!! FAILED BINDER TRANSACTION !!!  (parcel size = 542516)
01-02 14:06:06.185 3742-5073/? E/ActivityManager: Exception thrown during bind of ProcessRecord{5cfa3c4 23962:}

 android.os.TransactionTooLargeException: data parcel size 542516 bytes
  at android.os.BinderProxy.transactNative(Native Method)
  at android.os.BinderProxy.transact(Binder.java:628)
  at android.app.ApplicationThreadProxy.bindApplication(ApplicationThreadNative.java:1183)
  at com.android.server.am.ActivityManagerService.attachApplicationLocked(ActivityManagerService.java:8409)
  at com.android.server.am.ActivityManagerService.attachApplication(ActivityManagerService.java:8526)
  at android.app.ActivityManagerNative.onTransact(ActivityManagerNative.java:550)
  at com.android.server.am.ActivityManagerService.onTransact(ActivityManagerService.java:3574)
  at android.os.Binder.execTransact(Binder.java:573)

我怀疑这是在onCreate(SQLiteDatabase db)上发生的。我以前有较小的数据库,它工作正常。它仍在使用以前的Android版本的设备。任何想法? 我的应用程序目前有大型数据库-320表。我注意到如果我在清单android.os.TransactionTooLargeException中注释掉了一个提供者:数据包大小有点小......所以看起来问题出在内容提供者身上。

1 个答案:

答案 0 :(得分:0)

当您尝试在Intent中放入超过1mb的数据时会发生这种情况。

如果您的onCreate正在执行类似插入初始数据的操作,您应该考虑在几个较小的批次(applyBatch)中执行此操作以避免此问题。如果您尝试对图像或其他大型数据执行某些操作,您唯一的选择可能是缩小其大小,或者只传递一个允许您稍后访问该文件的句柄