docsで報告されているように、インテントのサイズの余裕が1MBであると思っていました。とにかく、私はこの恐ろしいTransactionTooLargeException
を追いかけて1日に失わ:TransactionTooLargeException新しいアクティビティを開始したとき
E/JavaBinder(368): !!! FAILED BINDER TRANSACTION !!!
Exception when starting activity android/com.android.internal.app.ChooserActivity
android.os.TransactionTooLargeException
at android.os.BinderProxy.transact(Native Method)
at android.app.ApplicationThreadProxy.scheduleLaunchActivity(ApplicationThreadNative.java:705)
at com.android.server.am.ActivityStack.realStartActivityLocked(ActivityStack.java:690)
at com.android.server.am.ActivityStack.startSpecificActivityLocked(ActivityStack.java:799)
at com.android.server.am.ActivityStack.resumeTopActivityLocked(ActivityStack.java:1743)
at com.android.server.am.ActivityStack.resumeTopActivityLocked(ActivityStack.java:1381)
at com.android.server.am.ActivityStack.completePauseLocked(ActivityStack.java:1129)
at com.android.server.am.ActivityStack.activityPaused(ActivityStack.java:1027)
at com.android.server.am.ActivityManagerService.activityPaused(ActivityManagerService.java:4288)
at android.app.ActivityManagerNative.onTransact(ActivityManagerNative.java:381)
at com.android.server.am.ActivityManagerService.onTransact(ActivityManagerService.java:1611)
at android.os.Binder.execTransact(Binder.java:367)
at dalvik.system.NativeStart.run(Native Method)
悪い事はstartActivityが失敗したということですが、ActivityManagerは無限のプロセスを生成、何度もそれを再起動し続けています。これはthisブログ投稿で確認されたようです。投稿者はの「制限」を86389文字のとしています。コードの私の関連する部分は非常に簡単です:
Intent myIntent = new Intent(activity, VacancySwipeActivity.class);
//myIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
Bundle ex = new Bundle();
ex.putSerializable(Constants.Extra.VACANCY, vacancies);
ex.putString("token", token);
ex.putString("cosa", cosa.getText().toString());
ex.putInt("dist", searchDistance.getProgress());
ex.putString("dove", dove.getText().toString());
if (ret.getSearchLocation() != null) {
ex.putParcelable("userLoc", ret.getSearchLocation());
}
ex.putInt("totRows", ret.getTotFound());
myIntent.putExtras(ex);
activity.startActivity(myIntent);
ArrayListの欠陥は、スレッドにロードされ、その後、テントの余分を経て、新たな活動に渡される約8 POJO、非常に小さいです。私が約90kにそれを上げると、アプリは無期限に再起動する必要があります。本当に迷惑です。 誰でもこの経験があります?
メソッド 'putParcelableArrayList()'があります。私はソースを見ていないが、一般的な 'putSerializable()'を使うよりも効率的かもしれない。 – paul