Parcelable
オブジェクトと Bundle
オブジェクトは、
IPC/Binder など、プロセスの境界を越えて使用
トランザクション、インテントとアクティビティ間のトランザクション、構成全体での一時的な状態の保存などの機能を利用できます。
できます。このページでは、Terraform の使用に関する推奨事項とベスト プラクティスについて説明します。
Parcelable
オブジェクトと Bundle
オブジェクト。
注: Parcel
は汎用ではありません。
シリアライゼーション メカニズムであるため、
Parcel
データをディスクに保存するか、ネットワーク経由で送信します。
アクティビティ間でデータを送信する
アプリが Cloud Storage で使用する Intent
オブジェクトを
新しい Activity を開始する際に startActivity(android.content.Intent)
アプリは
パラメータ(putExtra(java.lang.String, java.lang.String)
を使用)
メソッドを呼び出します。
次のコード スニペットに、この処理を実行する方法の例を示します。
Kotlin
val intent = Intent(this, MyActivity::class.java).apply { putExtra("media_id", "a1b2c3") // ... } startActivity(intent)
Java
Intent intent = new Intent(this, MyActivity.class); intent.putExtra("media_id", "a1b2c3"); // ... startActivity(intent);
OS は、インテントの基となる Bundle
をパーセル化します。その後、OS は
新しいアクティビティ
データのパーセルを解除し、インテントを新しいアクティビティに渡します。
Bundle
クラスを使用して、OS が認識しているプリミティブを設定することをおすすめします。
Intent
オブジェクト。Bundle
クラスは、
パーセルを使用したマーシャリングとアンマーシャリングに最適化されています。
場合によっては、複合オブジェクトまたは複合オブジェクトをアクティビティ間で送信するメカニズムが必要になることがあります。
このような場合、カスタムクラスで Parcelable を実装し、
writeToParcel(android.os.Parcel, int)
メソッドを使用します。
また、null ではない CREATOR
フィールドも用意する必要があります。
Parcelable.Creator
インターフェースを実装します。このインターフェース
createFromParcel()
メソッドは、Parcel
を現在のオブジェクトに戻すために使用されます。
詳しくは
Parcelable
オブジェクトのリファレンス ドキュメントをご覧ください。
インテントを介してデータを送信する場合は、データサイズを数 KB に制限するよう注意する必要があります。
送信するデータが多すぎると、システムから
TransactionTooLargeException
例外。
プロセス間でデータを送信する
プロセス間でデータを送信する方法は、アクティビティ間で行う方法と似ています。ただし、
カスタム Parcelable は使用しないことをおすすめします。カスタムの
Parcelable
オブジェクトをアプリから別のアプリに転送するには、そのアプリが
カスタムクラスとまったく同じバージョンの
送信側のアプリと受信側のアプリの両方に存在します。通常、これは共通ライブラリ
使用しています。アプリがカスタム Parcelable を
これは、システムが認識していないクラスをアンマーシャリングできないためです。
たとえば、アプリでのアラームの設定には、
AlarmManager
クラスを使用し、カスタムの Parcelable
を使用する
定義しますアラームが鳴ると、システムはインテントの
追加する特典の Bundle
繰り返し回数を表します。この変更により、システムでカスタム バックエンドが削除され、
エクストラの Parcelable
。その結果、アプリの
変更されたアラーム インテントを受け取ると、アプリがクラッシュする
存在しないデータを受信できます
Binder トランザクション バッファには、現在 1 MB の固定サイズが限られており、 処理中のトランザクションを検出できますこのプロセスでは 場合、これらのトランザクションには、すべてのバインダー トランザクションが onSaveInstanceState、startActivity、システムとのやり取りなどのアプリに関する操作。サイズが 制限を超えると、TransactionTooLargeException がスローされます。
savedInstanceState の特定のケースでは、データの量を小さくする必要があります。 これは、提供されたデータを、ユーザーが そのアクティビティに戻ることができる(アクティビティのプロセスが強制終了された場合でも) 保存済み状態は 5 万未満のデータに保つことをおすすめします。
注: Android 7.0(API レベル 24)以降では、システムは TransactionTooLargeException がランタイム例外として発生しました。 それより前のバージョンの Android では、logcat に警告のみが表示されます。