私のAndroid=アプリケーションでは、常にIntent
クラスのputExtra()
関数を使用して、新しいActivity
に任意の数の値を渡します。
このような:
_Intent i = new Intent(this, MyActivity.class);
i.putExtra(ID_EXTRA1, "1");
i.putExtra(ID_EXTRA2, "111");
startActivity(i);
_
AndroidでBundle
について知っています。そして、新しいBundle
に値を渡すためにActivity
を使用している人々を見てきました。
このような:
_Intent intent = new Intent(this, MyActivity.class);
Bundle extras = new Bundle();
extras.putString("EXTRA_USERNAME","my_username");
extras.putString("EXTRA_PASSWORD","my_password");
intent.putExtras(extras);
startActivity(intent);
_
ここで2つの疑問があります。
値を新しいBundle
に直接渡すことでActivity
に値を渡すことができる場合、なぜIntent
を使用する必要がありますか?
直接Bundle
putExtra()
の代わりにIntent
を使用する利点は何ですか?
違いはほとんどありません。追加のバンドルを使用するコードは、少し重く(実際のアプリケーションでは違いはありません)、管理がやや簡単で、より一般的です。
ある日、インテント内で情報を送信する前に、データベースにデータをシリアル化することを決定した場合、シリアル化できるバンドルを作成し、インテントに追加してからPendingBundleにフィードする方が少しきれいになります-すべて1つのオブジェクトで。
[更新]
明確化(他のいくつかの回答のため)。
エキストラis各Intentが運ぶ可能性のある追加のバンドル(必須ではありません)。したがって、バンドルを使用するか使用しないかの選択肢はありません。どちらの方法でもバンドルを使用しています。
初めてputExtra
を使用すると、Intent内のmExtras
バンドルが初期化され、次のすべてのputExtraがそれに委任されます。バンドル自体にはアクセスできません(特定の種類のバグを回避するために設計されています)。
putExtras しないバンドルをIntent内に配置します。代わりに、現在のインテントバンドルにコピーします(または、putExtra
と同様に作成します)。これがわずかに重い理由です(1つではなく2つのバンドルがあり、コピーの代価を支払う)。
重要なのは-putExtras
を使用する場合でも、インテント内の実際のバンドルにアクセスできないことです。しかし-あなたはあなたがそれでやりたいかもしれない何かのためのコピーを持っています。他のインテントにコピーするようにしてください(同様のインテントを多数送信する場合)。
追加の利点:データがバンドルに入れられると、複数のインテントを介して同じデータを送信できます。 (その場合のみ、複数のインテントが送信されます)。
バンドルは、作成/読み取りをより簡単に分離できるため、UIのコードからバンドルを処理するコードを分離できるため、クールです。
ほとんどの場合、データの可能な限り少ない量(通常は文字列の数、id ...)を送信したいので役に立たない