82

私のAndroidアプリケーションでは、クラスの直接putExtra()関数を常に使用しIntentて、任意の数の値を new に渡していますActivity
このような:

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

私は Android について知っており、値を new に渡すためにBundle人々が使用しているのを見てきました。 このような:BundleActivity

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点疑問があります。newに値を直接渡すことで値を渡すことができる場合、
なぜ使用する必要があるのですか? direct の代わりに 使用する利点は何ですか?BundleActivityIntent
BundleIntent putExtra()

4

4 に答える 4

67

それはほとんど(違いがあったとしても)しません。追加のバンドルを使用するコードは少し重くなり (実際のアプリケーションでは違いはありません)、管理が少し簡単になり、より一般的になります。

ある日、インテント内で情報を送信する前に、データをデータベースにシリアライズすることを決定した場合、シリアライズできるバンドルを用意し、インテントに追加してから PendingBundle にフィードすると、少しすっきりします。 1つのオブジェクトで。

[アップデート]

明確化(他の回答があるため)。

Extras、各 Intent が持つ可能性のある追加のバンドルです (必須ではありません)。そのため、バンドルを使用するか使用しないかの選択肢はありません。いずれかの方法でバンドルを使用しています。

を初めて使用するputExtraと、mExtrasIntent 内のバンドルが初期化され、以降のすべての putExtra が委任されます。バンドル自体にはアクセスできません (これは、特定の種類のバグを回避するための設計によるものです)。

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

重要なのは、 を使用putExtrasしても、インテント内の実際のバンドルにアクセスできないことです。しかし - あなたはそれを使ってやりたいことがあれば、そのコピーを持っています。別のインテントにコピーするようにします (同様のインテントをたくさん送信する場合)。

于 2013-03-06T09:52:38.117 に答える
17

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

于 2015-01-20T10:42:39.380 に答える
6

バンドルは、作成/読み取りをより簡単に分離できるため、クールです。したがって、バンドルを処理するコードをUIのコードから分離できます。

ほとんどの場合、可能な限り最小量のデータ(通常は2、3の文字列、ID ...)を送信する必要があるため、これは役に立ちません。

于 2013-03-06T09:50:50.760 に答える
5

Intent and Bundle Relation (Stackoverflow)Android プログラムにおけるバンドルの重要性(Stackoverflow)を参照できます。

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

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

于 2013-03-06T12:22:10.033 に答える