शुरू करते समय TransactionTooLargeException मैंने सोचा कि आकार में इरादा की अतिरिक्त सीमा 1 एमबी थी, जैसा कि docs पर बताया गया था। वैसे भी, मैं पीछा करते हुए इस भयानक 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 ब्लॉग पोस्ट पर पुष्टि की गई है, जहां लेखक 8638 9 वर्णों की 'सीमा' इंगित करता है। कोड का मेरा प्रासंगिक टुकड़ा काफी सरल है:
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, कि एक थ्रेड में लोड हो जाता है और उसके बाद आशय के अतिरिक्त के माध्यम से एक नई गतिविधि के लिए पारित कर दिया। अगर मैं इसे लगभग 9 0k तक बढ़ाता हूं, तो ऐप अनिश्चित काल तक रीबूट की आवश्यकता होती है, एक वास्तविक परेशानी। किसी और ने इस का अनुभव किया?
एक विधि 'putParcelableArrayList() 'है। मैंने स्रोत को नहीं देखा है, लेकिन सामान्य 'putSerializable() 'का उपयोग करने से यह अधिक कुशल हो सकता है। – paul