標籤:
Intent可以理解是Android不同組件之間的媒介或者是信使,起著通訊的作用,這樣四大組件之間的耦合就不是特別多,系統可擴充性就比較強比較健壯。
我們可以設想,一個機器人由activity,service,broadcast,contentProvider構成,如果緊密拼湊在一起根本無法“奔跑”,那麼現在我們有了Intent,可以理解成機器人的關節,
這樣就溝通了四大組件,機器人就能奔跑啦。(包括binder機制,這種c/s結構一定程度上都是為瞭解耦)
還可以和瀏覽器的url類比,用戶端和伺服器之間是通過發送uri來相互連信的,這種鬆散的網路拓撲就會很健壯,便於共用伺服器資源和網路的擴充。
那麼常見的Intent的使用是啟動Activity,Service,Broadcasst.
組件名稱 |
方法名稱 |
Activity |
startActivity() startActivityForResult() |
Service |
startService() bindService() |
Broadcasts |
sendBroadcast() sendOrderedBroadcast() sendStickyBroadcast() |
Intent在尋找目標組件的時候有兩種方式。一為顯示調用,通過Component name來直接指定,如startActivity(intent);二位隱式調用,沒有明確指定目標組件的名稱,通過一定的條件過濾篩選,如setAction
那麼重點來了,Intent對象是由哪些部分構成呢,由一下六個部分構成:Component name,Action,Data,Category,Extras,Flags.Intent可以任選其中的幾項來構造,主要是看intent的用途而定。(Intent實質是一系列傳輸資訊類型的集合)
1.Component name
Component name就是組件名稱,是要處理這個Intent對象的組件名稱。
組件名稱對象由ComponentName類來封裝,組件名稱包含包名稱和類名稱,被聲明在AndroidManifest.xml檔案中。
組件名稱通過setComponent(),setClass(),setClassName()設定,通過getComponent()擷取。
需要注意的是Component name是一個可選項,如果被設定,那麼Intent對象就顯式指定了要轉向的組件,如果沒有被設定,則Intent對象需要根據其他資訊進行篩選尋找。
2.Data
資料類型也可以顯式指定,比如setData()方法指定資料為URI,setType() 指定為MIME type,setDataAndType() 指定它既為URI又為MIME type。讀取的時候URI用getData(),MIME type用getType()。
3.Category
與category相應的方法有添加addCategory()、移除removeCategory() 和擷取所有category getCategories() 。
常見的Category常量有:CATEGORY_BROWSABLE ,CATEGORY_GADGET,CATEGORY_HOME,CATEGORY_LAUNCHER,CATEGORY_PROFERENCE.
Category指定的往往是一些控制項。
4.Extras
實際上,資料可以被作為一個Bundle對象被使用,利用 putExtras() 和 getExtras() 方法。我們可以看出bundle實質上是hashmap,儲存一些索引值;然後傳遞這些索引值的資訊。
public Bundle() {
mMap = new HashMap<String, Object>();
mClassLoader = getClass().getClassLoader();
}
5.Flags
各種類型的Flag。很多是用來指定Android系統如何啟動activity,還有啟動了activity後如何對待它。所有這些都定義在Intent類中。
6.Action
Action是指Intent要完成的動作,是一個字串常量。
Intent類中有很多預定義的常量,為了一些通常的動作;還有一些定義在Android API的其他地方。
也可以自己定義Action常量,自訂的常量需要加上你的應用的包名作為首碼。
Action在很大程度上決定了Intent的其他部分是如何構造的,尤其是 data 和 extras域。(就好像函數名會決定著參數值和傳回值一樣。)所以Action的名字應該儘可能具體,並且它們應該和Intent中的其他域緊密結合。
使用 setAction() 和 getAction()來設定和讀取Action屬性。
常見的Action包括:ACTION_CALL,ACTION_EDIT,ACTION_MAIN,ACTION_SYNC,ACTION_BATTERY_LOW,
ACTION_HEADSET_PLUG,ACTION_SCREEN_ON,ACTION_TIMEZONE_CHANGED.
Action指向的往往是android的系統服務相關的,如系統service,broadcast之類的系統服務。
Android-理解Intent