Android細(xì)節(jié)問題 —— 有了Intent,為什么還要有Bundle?

Intent本身就可以傳遞參數(shù)(Intent.putExtra("key", value))為何還要用Bundle呢?

兩者比較

  1. Bundle只是一個(gè)信息的載體,內(nèi)部其實(shí)就是維護(hù)了一個(gè)Map<String,Object>。
  2. Intent負(fù)責(zé)Activity之間的交互,內(nèi)部是持有一個(gè)Bundle的。
  • putExtra()方法的源碼
public Intent putExtra(String name, boolean value) {
        if (mExtras == null) {
            mExtras = new Bundle();
        }
        mExtras.putBoolean(name, value);
        return this;
    }
  • putExtras(Bundle bundle):會(huì)將Intent的內(nèi)部Bundle替換成參數(shù)bundle。

應(yīng)用場(chǎng)景

  • 例1:
    從A界面跳轉(zhuǎn)到B界面或者C界面
    這樣的話 我就需要寫2個(gè)Intent 如果你還要涉及的傳值的話 你的Intent就要寫兩遍添加值的方法。那么,如果我用1個(gè)Bundle,直接先存值,然后再存到Intent中 不就更簡(jiǎn)潔嗎?

  • 例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使用場(chǎng)景

  • 在設(shè)備旋轉(zhuǎn)時(shí)保存數(shù)據(jù)
 // 自定義View旋轉(zhuǎn)時(shí)保存數(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í)保存數(shù)據(jù)
public class CustomActivity extends Activity {
  
    @Override
    protected void onSaveInstanceState(Bundle savedInstanceState) {
        super.onSaveInstanceState(savedInstanceState);
        savedInstanceState.put...
    }
  • Fragment之間傳遞數(shù)據(jù)
    比如,某個(gè)Fragment中點(diǎn)擊按鈕彈出一個(gè)DialogFragment。
    最便捷的方式就是通過Fragment.setArguments(args)傳遞參數(shù)。

所以,Bundle是不可替代的。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • ¥開啟¥ 【iAPP實(shí)現(xiàn)進(jìn)入界面執(zhí)行逐一顯】 〖2017-08-25 15:22:14〗 《//首先開一個(gè)線程,因...
    小菜c閱讀 7,322評(píng)論 0 17
  • Q156 最近三個(gè)月你讀了哪些書?每一本對(duì)你的進(jìn)步有什么貢獻(xiàn)?怎樣做,才能確保將來三個(gè)月里讀的書能帶來更大的收獲?...
    商未央閱讀 199評(píng)論 0 1
  • 現(xiàn)在朋友圈微商當(dāng)?shù)?,每天都讓各種廣告刷屏!賣的物品也是五花八門,有各式水果、蛋糕點(diǎn)心、土特產(chǎn)、衣帽鞋襪、化妝...
    悲傷時(shí)下雪閱讀 1,316評(píng)論 0 0
  • 這是鐵陽的第31幅導(dǎo)圖,睡前清單。最近準(zhǔn)備分別列幾個(gè)清單出來,有睡前清單、起床后清單以及回家后的作業(yè)清單等。這個(gè)睡...
    民大鐵老師閱讀 621評(píng)論 3 1

友情鏈接更多精彩內(nèi)容