なぜAndroid IntentでBundleを使うのですか?


Intent


Androidではintentはメッセージオブジェクトであり、他の要素からの操作を要求するために使用できます.代表的な使用方法はactivityを呼び出すことです.

ためらう


intentで実装されたputExtra()メソッドを用いてデータを伝達する方法がある.
ここに懸念が現れた.
//1
val intent = Intent()
intent.putExtra("key","value")

//2
val intent = Intent()
val bundle =Bundle()
bundle.putString("key","value")
intent.putExtra("bundle",bundle)
1番の方法と2番の方法の違いは何ですか?
私はずっと1番の方法を使っていて、2番の方法があることに気づきました.

上記の2つの方法を用いても同様の結果が得られる.
Bundleを使う部分が一目瞭然で、手間もかかります.
だからBundleを使わないほうが楽に見えると思います.

ないぶこうぞう


便利なことに、Bundleを使わないのは便利に違いない.
しかし、内部構造から見ると、状況は異なる.(可能)
private Bundle mExtras;
public @NonNull Intent putExtra(String name, @Nullable String value) {
	if (mExtras == null) {
		mExtras = new Bundle();
	}
	mExtras.putString(name, value);
	return this;
}
IntentのputExtraは最終的にBundleを使用した.
すなわち,putExtra()は便宜上の支援にすぎない.
それに対して
ArrayMap<String, Object> mMap = null;
public void putString(@Nullable String key, @Nullable String value) {
	unparcel();
	mMap.put(key, value);
}
Bundleのメソッドを表示すると、Mapを使用してデータ入力が行われていることがわかります.

n/a.結論


では内部でBundleを使います.
やはり使いやすいIntentの方がいいです.
if (mExtras == null) {
	mExtras = new Bundle();
}
問題は、intentに直接データを入れると、上のコードが通ります.
すなわち,入力データごとに条件文を1回通過する.
これに対してBundleを使用すると
mMap.put(key, value);
Mapに直接置く
入れたデータ量によって速度が異なる場合があります.
要するに、Bundleを使うともっとよく見えます.