Tôi nghĩ giới hạn phụ của Intent là 1MB, như được báo cáo trên docs. Dù sao, tôi mất một ngày đuổi khủng khiếp TransactionTooLargeException
này:TransactionTooLargeException khi bắt đầu Hoạt động mới
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)
điều xấu là startActivity thất bại, nhưng ActivityManager tục khởi động lại nó hơn và hơn, đẻ trứng quá trình vô hạn. Điều này dường như được xác nhận trên this bài đăng trên blog, trong đó tác giả chỉ ra một giới hạn là 'giới hạn' của 86389 ký tự. mảnh có liên quan của tôi mã khá đơn giản:
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);
Các tuyển dụng ArrayList là rất nhỏ, khoảng 8 POJO, mà được nạp trong một chủ đề và sau đó chuyển đến một hoạt động mới qua Intent thêm của. Nếu tôi tăng nó lên khoảng 90k, vòng lặp ứng dụng vô thời hạn yêu cầu khởi động lại, một sự phiền toái thực sự. Bất kỳ ai khác đã trải nghiệm điều này?
có phương thức 'putParcelableArrayList()'. tôi đã không nhìn vào nguồn nhưng có lẽ nó hiệu quả hơn việc sử dụng 'putSerializable()' chung. – paul