[解決済み] AndroidでIntent putExtra()を直接使う代わりにBundleを使う利点
質問
私のアンドロイドアプリケーションでは、常にダイレクトに
putExtra()
の関数を使用しています。
Intent
クラスで、任意の数の値を新しい
Activity
.
このように
Intent i = new Intent(this, MyActivity.class);
i.putExtra(ID_EXTRA1, "1");
i.putExtra(ID_EXTRA2, "111");
startActivity(i);
について知っている
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
の代わりに、直接
Intent
putExtra()
?
どのように解決するのですか?
ほとんど (違いがあるとしても) ありません。追加のバンドルを使用するコードはわずかに重くなり (実際のアプリケーションでは違いはありません)、より一般的であるためわずかに管理しやすくなります。
ある日、インテント内で情報を送信する前に、データをデータベースにシリアライズすることを決めた場合、シリアライズしてインテントに追加し、PendingBundle に供給できるバンドルを持つことは、少しすっきりします - すべて 1 つのオブジェクトで。
[更新]
明確化(他の回答があったため)。
番外編 は は、各インテントが運ぶかもしれない(しかし運ぶ必要はない)追加のバンドルで、バンドルを使用するか使用しないかの選択肢はありません。どちらにしてもバンドルを使用していることになります。
を使用するのは
putExtra
, a
mExtras
のような Intent 内のバンドルが初期化され、それ以降の putExtra は全てそれに委ねられます。バンドル自体にはアクセスできません(これは、ある種のバグを避けるための設計です)。
putExtras
はしません。
は、バンドルをインテントの中に入れます。代わりに、現在のインテント・バンドルにコピーします (または、次のように作成します。
putExtra
). このため、若干重くなります(1つのバンドルではなく2つのバンドルがあり、コピーの代償を払うことになります)。
肝心なのは、もしあなたが
putExtras
を使用した場合、インテント内の実際のバンドルにアクセスすることはできません。しかし、そのバンドルでやりたいことのためにコピーを取っておくことができます。たとえば、別のインテントにコピーしておくことができます (同様のインテントを大量に送信する場合)。
関連
-
[解決済み] Intentsを使用して、あるAndroid Activityから別のAndroid Activityにオブジェクトを送信するにはどうすればよいですか?
-
[解決済み] Androidでインテントから余分なデータを取得するにはどうすればよいですか?
-
[解決済み] Androidにおけるインテントとは何ですか?
-
[解決済み] ArrayAdapter<myClass> の使用方法
-
[解決済み] Android Debug Bridgeでアプリケーションのインストール時にINSTALL_FAILED_VERSION_DOWNGRADEを無視する方法はありますか?
-
[解決済み] Androidのソースコードにある@hideの意味とは?
-
[解決済み] APKが署名済みかデバッグビルドかを確認するには?
-
[解決済み] EditTextの右側のDrawableにonClickListenerを設定する [重複] [重複
-
[解決済み] アンドロイドボタンセレクター
-
[解決済み] <string> XMLで改行やタブを作るには(eclipse/android)?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] Androidアプリケーションのアクティビティ間でデータを受け渡すにはどうすればよいですか?
-
[解決済み】Androidアプリケーションの「バンドル」とは?
-
[解決済み] Android Debug Bridgeでアプリケーションのインストール時にINSTALL_FAILED_VERSION_DOWNGRADEを無視する方法はありますか?
-
[解決済み] プログラム的に電話をかけるには?
-
[解決済み] Gmailの3分割アニメーションシナリオの完全動作サンプル?
-
[解決済み] Android: ランドスケープモード用の代替レイアウト xml
-
[解決済み] 複数のフィルタを持つBroadcastReceiverか、複数のBroadcastReceiverか?
-
[解決済み] Android: xml リソースからの整数値
-
[解決済み] Travis.yml ./gradlew : パーミッションが拒否されました。
-
[解決済み] Google Play ストア内部テストのロールアウトが開始できない