2013-03-06 28 views
60

私はいつもputExtra()Intentの機能のputExtra()の機能を使用して、新しいActivityに任意の数の値を渡しています。このよう
直接のインテントの代わりにバンドルを使用する利点

Intent i = new Intent(this, MyActivity.class); 
i.putExtra(ID_EXTRA1, "1"); 
i.putExtra(ID_EXTRA2, "111"); 
startActivity(i); 

は、私は約Bundle Androidの中を知っていると私は、人々が新しいActivityに値を渡すためBundleを使用している見てきました。このよう
:ここ

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つの疑問を持っています。
に直接入れることで、Activityに値を渡すことができる場合、なぜBundleを使用する必要がありますか?
putExtra()の代わりにBundleを使用する利点は何ですか?

答えて

56

それは少し(任意の違い場合)になります。追加のバンドルを使用するコードは、少し重いです(実用的なアプリケーションでは何の違いもありません)。

インテント内で情報を送信する前に、データをデータベースにシリアル化したい場合は、シリアル化してインテントに追加してからフィードすることができるバンドルを作成するのが少し洗練されますPendingBundle - すべて1つのオブジェクトを持ちます。

(なぜなら、いくつかの他の回答の)[更新]

明確。

エクストラです。各インテントには追加のバンドルがありますが、バンドルを使用するかどうかの選択肢はありません。バンドルをどちらかの方法で使用しています。

初めてputExtraを使用すると、Intent内のmExtrasバンドルが初期化され、次のすべてのputExtraが委譲されます。バンドル自体にはアクセスできません(これは特定の種類のバグを避けるために設計されています)。

putExtras はありませんあなたのバンドルをインテント内に置きます。代わりに、現在のインテントバンドルにコピーします(またはputExtraのように1つを作成します)。これが少し重いのです(1つではなく2つのバンドルがあり、コピーの代償を払っています)。

要点は、putExtrasを使用しても、インテント内の実際のバンドルにはまだアクセスできません。しかし、あなたはそれで何とかしたいと思っているもののコピーを持っています。別のインテントにコピーするようにしてください(たくさんの似たインテントを送信する場合)。

+0

このようなコードを使用するかどうかを教えてください Intent intent = new Intent(this、MyActivity.class);intent.putExtra(ID_EXTRA1、 "1"); バンドルエクストラ=新しいバンドル(); extras.putString( "EXTRA_USERNAME"、 "my_username"); extras.putString( "EXTRA_PASSWORD"、 "my_password"); intent.putExtras(extraras); startActivity(インテント); ID_EXTRA1にアクセスするにはどうすればいいですか? –

+0

@VishalVijay getExtrasを呼び出すと、元のバンドルではなく追加バンドルのコピーを手に入れることができます。慎重に、nullを返す可能性があります。 – fdreger

+0

新しいアクティビティrigtからID_EXTRA1とextras(バンドル)を取得できます。 –

5

バンドルの作成/読み込みをより簡単に分けることができるので、バンドルを扱うコードをUIのコードから分離することができるので、バンドルがクールです。あなたはデータの最小可能量に送信したいと思うよう役に立たないですほとんどの場合

(文字列の通常だけのカップル、IDを...)

4

thisthisを参照してください。

複数のデータを1つのバンドルで送信し、インテントで送信することができます。 または別の方法は、PutExtra()の複数のステートメントを追加することです。

私の知る限り、このような重要な違いはありません。

12

追加の利点:データがバンドルに入れられると、複数のインテントで同じデータを送信できます。 (この場合にのみ、複数のインテントが送信されます)。

関連する問題