Android中的Intent(意圖)的使用,androidintent
概述:
Intent(意圖)主要是解決Android應用的各項組件之間的通訊。Intent負責對應用中一次操作的動作、動作涉及資料、附加資料進行描述,Android則根據此Intent的描述,負責找到對應的組件,將 Intent傳遞給調用的組件,並完成組件的調用。因此,Intent在這裡起著一個媒體中介的作用,專門提供組件互相調用的相關資訊,實現調用者與被調用者之間的解耦。
分類:隱式意圖
不用指定要開啟的activity, 通過動作和資料的組合去尋找系統中, 能處理指定動作和資料的介面,因此該方法效率較低。
應用情境:
一個應用想被另一個應用開啟。
一個應用想開啟另一個應用程式。
開啟方法:
// 開啟代碼Intent intent = new Intent();intent.setAction("com.test.rpcalc.CALC_RP");intent.setData(Uri.parse("calc://張三"));intent.addCategory("android.intent.category.DEFAULT");startActivity(intent);// 被開啟介面資訊清單檔的配置<intent-filter > <action android:name="com.test.rpcalc.CALC_RP"/> <data android:scheme="calc" /> <!-- 額外類別參數 --> <category android:name="android.intent.category.DEFAULT"/></intent-filter>顯式意圖
指定(包名, 類名), 直接進行跳轉。 效率高。
應用情境:
應用內部的介面之間進行跳轉(安全)
應用之間跳轉可以給Activity配置android:exported="true", 預設false
開啟方法
方式一:Intent intent = new Intent(this, SelectNumberActivity.class);startActivity(intent);方式二:Intent intent = new Intent();intent.setClassName("com.test.smssenderapp", "com.test.smssenderapp.SelectNumberActivity");startActivity(intent);Intent的資料傳遞
1.intent.setData(uri) -- intent.getData();
- 傳遞字串資料, 比較局限.
2.intent.putExtra(name, value)
- 8 大基礎資料型別 (Elementary Data Type)(byte,short,int,long;float,double;char;boolean), 及其數組。
- String字串傳CharSequence
- Serializable 序列化對象 (序列化到檔案) 介面
- Parcelable 序列化對象 (郵包化到記憶體) 介面
- Bundle 類似於map的資料集合。使用 putExtras()。
Intent中傳遞對象的方法:
一種是Bundle.putSerializable(Key,Object);
另一種是Bundle.putParcelable(Key, Object);
選擇序列化方法的原則:
1)在使用記憶體的時候,Parcelable比Serializable效能高,所以推薦使用Parcelable。
2)Serializable在序列化的時候會產生大量的臨時變數,從而引起頻繁的GC。
3)Parcelable不能使用在要將資料存放區在磁碟上的情況,因為Parcelable不能很好的保證資料的持久性在外界有變化的情況下。儘管Serializable效率低點,但此時還是建議使用Serializable 。
參考博文連結:
《Android中Intent中傳遞對象的方法》 http://www.oschina.net/code/snippet_1408868_39329
《Android中Parcelable介面用法》http://www.cnblogs.com/renqingping/archive/2012/10/25/Parcelable.html
著作權聲明:本文為博主原創文章,未經博主允許不得轉載。