Android-理解Intent

來源:互聯網
上載者:User

標籤:

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

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.