Je pensais que la limite supplémentaire de l'intention était de 1 Mo, comme indiqué sur docs. Quoi qu'il en soit, j'ai perdu une jours chasser cette terrible TransactionTooLargeException
:TransactionTooLargeException lors du démarrage d'une nouvelle activité
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)
la chose est mauvaise qui ne startActivity, mais ActivityManager ne cesse de redémarrer encore et, fraie processus infinis. Cela semble être confirmé sur this blog, où l'auteur indique une «limite» de 86389 caractères . Ma pièce pertinente de code est assez simple:
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);
Les postes vacants ArrayList est très faible, environ 8 POJO, qui est chargé dans un fil, puis passé à une nouvelle activité par EXTRAS intention. Si je l'augmente à environ 90k, l'application boucle indéfiniment nécessitant un redémarrage, un réel ennui. Quelqu'un d'autre a-t-il expérimenté ce?
il existe une méthode 'putParcelableArrayList()'. je n'ai pas regardé la source mais peut-être est-ce plus efficace que d'utiliser le général 'putSerializable()'. – paul