`Parcelable Bundle IPC / Binder Parcelable Bundle`對象的建議和最佳實踐 。 在活動之間發送數據 當應用程式創建一個 用於 啟動新 的對象時 ,應用程式可以使用該 方法傳入參數。 OS Bundle包含意圖的基礎。然後,操作系統創建新的活動,取消數據包 ...
Parcelable
並且Bundle
對象旨在用於跨IPC / Binder
事務等進程邊界,活動與意圖之間以及跨配置更改存儲瞬態。本頁面提供使用Parcelable
和Bundle
對象的建議和最佳實踐 。
在活動之間發送數據
當應用程式創建一個Intent
用於startActivity(android.content.Intent)
啟動新Activity
的對象時 ,應用程式可以使用該putExtra(java.lang.String, java.lang.String)
方法傳入參數。
Intent intent = new Intent(this, MyActivity.class);
intent.putExtra("media_id", "a1b2c3");
// ...
startActivity(intent);
OS Bundle包含意圖的基礎。然後,操作系統創建新的活動,取消數據包裹,並將意圖傳遞給新活動
- 我們建議您使用
Bundle
該類在Intent
對象上設置操作系統已知的基元。Bundle
類可以有效處理編組和解組
- 有時候,我們需要在activity之間發送複雜的數據或者對象時
- 建議實現
Parcelable
介面 + 提供writeToParcel(android.os.Parcel, int)
方法
- 提供一個CREATOR參數來實現
Parcelable.Creator
介面,該介面的createFromParcel()
方法用於將Parcel
後退轉換為當前對象
- 建議實現
- 通過Intent傳數據是,建議只傳
1-10kb
進程之間發送數據
- 在進程之間發送數據與在活動之間執行數據類似。
- 但是,在進程之間發送時,我們建議您不要使用自定義的可分區。如果您將自定義
Parcelable
對象從一個應用程式發送到另一個應用程式,則需要確保發送應用程式和接收應用程式都具有完全相同的自定義類別版本。通常這可能是跨兩個應用程式使用的通用庫。如果您的應用程式嘗試向系統發送自定義parcelable
,則會發生錯誤,因為系統無法解組它不知道的類。 Binder
事務緩衝區具有有限的固定大小,當前為1MB,由進程中的所有事務共用。由於此限制處於流程級別而非每個活動級別,因此這些事務包括應用程式中的所有綁定事務,例如onSaveInstanceState,startActivity
和與系統的任何交互。當超過大小限制時,將引發TransactionTooLargeException
。
- 對於
savedInstanceState
的具體情況,數據量應該保持很小,因為只要用戶可以導航回該活動(即使活動的進程被終止),系統進程也需要保留提供的數據。我們建議您將保存狀態保持為小於50k的數據。