Intent本身就可以傳遞參數(shù)(Intent.putExtra("key", value))為何還要用Bundle呢谓松?
兩者比較
- Bundle只是一個信息的載體星压,內(nèi)部其實就是維護了一個Map<String,Object>。
- Intent負責Activity之間的交互鬼譬,內(nèi)部是持有一個Bundle的娜膘。
- putExtra()方法的源碼
public Intent putExtra(String name, boolean value) {
if (mExtras == null) {
mExtras = new Bundle();
}
mExtras.putBoolean(name, value);
return this;
}
- putExtras(Bundle bundle):會將Intent的內(nèi)部Bundle替換成參數(shù)bundle。
應用場景
例1:
從A界面跳轉(zhuǎn)到B界面或者C界面
這樣的話 我就需要寫2個Intent 如果你還要涉及的傳值的話 你的Intent就要寫兩遍添加值的方法优质。那么竣贪,如果我用1個Bundle,直接先存值巩螃,然后再存到Intent中 不就更簡潔嗎演怎?例2:
現(xiàn)在要把值通過Activity A經(jīng)過Activity B傳給Activity C。
如果用Intent的話避乏,A-B先寫一遍爷耀,再在B中都取出來 然后在把值塞到Intent中,再跳到C拍皮。
如果在A中用了 Bundle 的話歹叮,把Bundle傳給B,在B中再轉(zhuǎn)傳到C铆帽,C就可以直接去取了咆耿。
bundle使用場景
- 在設備旋轉(zhuǎn)時保存數(shù)據(jù)
// 自定義View旋轉(zhuǎn)時保存數(shù)據(jù)
public class CustomView extends View {
@Override
protected Parcelable onSaveInstanceState() {
super.onSaveInstanceState();
Bundle bundle = new Bundle();
bundle.put...
return bundle;
}
// Activity旋轉(zhuǎn)時保存數(shù)據(jù)
public class CustomActivity extends Activity {
@Override
protected void onSaveInstanceState(Bundle savedInstanceState) {
super.onSaveInstanceState(savedInstanceState);
savedInstanceState.put...
}
- Fragment之間傳遞數(shù)據(jù)
比如,某個Fragment中點擊按鈕彈出一個DialogFragment爹橱。
最便捷的方式就是通過Fragment.setArguments(args)傳遞參數(shù)萨螺。
所以,Bundle是不可替代的。