Intent傳值與Bundle傳值的區別(原始碼分析)

desaco發表於2016-03-10

> Intent傳值的原始碼:

public class Intent implements Parcelable, Cloneable {

public Intent putExtra(String name, String value) {
        if (mExtras == null) {
            mExtras = new Bundle();
        }
        mExtras.putString(name, value);
        return this;
    }
> Bundle傳值原始碼:

public final class Bundle implements Parcelable, Cloneable {

public Bundle() {

        mMap = new ArrayMap<String, Object>();
        mClassLoader = getClass().getClassLoader();
    }
public void putString(String key, String value) {
        unparcel();
        mMap.put(key, value);
    }

  你怎麼傳 如果用Intent的話   A-B先寫一遍   再在B中都取出來 然後在把值塞到Intent中 再跳到C   累嗎?
如果我在A中用了 Bundle 的話  我把Bundle傳給B 在B中再轉傳到C  C就可以直接去了 
這樣的話 還有一個好處 就是在B中 還可以給Bundle物件新增新的 key - value  同樣可以在C中取出來
  Android中提供了Intent機制來協助應用間的互動與通訊,或者採用更準確的說法是,Intent不僅可用於應用程式之間,也可用於應用程式內部的Activity/Service之間的互動。Intent這個英語單詞的本意是“目的、意向”等,對於較少從事於大型平臺開發工作的程式設計師來說,這可能是一個不太容易理解的抽象概念,因為它與我們平常使用的簡單函式/方法呼叫,或者上節中提到的通過庫呼叫介面的方式不太一樣。在Intent的使用中你看不到直接的函式呼叫,相對函式呼叫來說,Intent是更為抽象的概念,利用Intent所實現的軟體複用的粒度是Activity/Service,比函式複用更高一些,另外耦合也更為鬆散。
  Android中與Intent相關的還有Action/Category及Intent Filter等,另外還有用於廣播的Intent,這些元素摻雜在一起,導致初學者不太容易迅速掌握Intent的用法。在講解這些名詞之前,我們先來從下面的例子中感受一下Intent的一些基本用法,看看它能做些什麼,之後再來思考這種機制背後的意義。

相關文章