Intent傳值與Bundle傳值的區別(原始碼分析)
> 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的一些基本用法,看看它能做些什麼,之後再來思考這種機制背後的意義。
相關文章
- 頁面間傳值與跳轉的區別
- vue父子傳值與非父子傳值Vue
- 值傳遞與引用傳遞
- C語言的傳值與傳地址C語言
- “閥值”與“閾值”的區別
- IOS學習筆記(頁面傳值:屬性傳值,協議代理傳值,閉包傳值)iOS筆記協議
- 快速搞懂值傳遞與引用傳遞
- iOS Block傳值、代理傳值、通知中心iOSBloC
- javascript原始值和引用值型別及區別JavaScript型別
- php 傳值與傳引用的理解(通俗易懂)PHP
- Java傳參傳值Java
- Android 元件系列-----Activity的傳值和回傳值Android元件
- 不同的activity使用bundle物件傳值給廣播接收器物件
- 元件:非父子間傳值(同級傳值)元件
- java 獲取傳入值的區間Java
- Activity的跳轉與傳值薦
- iOS傳值iOS
- Vue--子元件互相傳值,子元件來回傳值,傳值反覆橫跳Vue元件
- C#程式設計引用型別和值型別 以及引用傳遞和值傳遞C#程式設計型別
- 後臺傳值與dialog的使用
- 值型別與引用型別的區別型別
- url傳遞的引數值編碼
- SAP ABAP 方法呼叫裡傳值(Pass Value)和傳引用(Pass Reference)的區別試讀版
- 值傳遞和引用傳遞
- Vue 元件傳值Vue元件
- java值傳遞Java
- 按值傳遞
- JavaScript的值傳遞和引用傳遞JavaScript
- Java的值傳遞和引用傳遞Java
- Intent與PendingIntent的區別Intent
- 【Android原始碼】Intent 原始碼分析Android原始碼Intent
- golang工作筆記(二)值傳遞與引用傳遞Golang筆記
- Ajax與Flask傳值的跨域問題Flask跨域
- Vue 路由傳值(傳參)詳解Vue路由
- 網頁間傳值怎麼傳網頁
- JAVA值傳參和引用傳參Java
- go 值傳遞和地址傳遞的例子Go
- Java中的值傳遞和引用傳遞Java