在Android中有四大組件,這些組件中有三個組件與Intent相關(guān),可見Intent在Android整個生態(tài)中的地位高度。Intent是信息的載體,用它可以去請求組件做相應(yīng)的操作,但是相對于這個功能,Intent本身的結(jié)構(gòu)更值得我們?nèi)パ芯俊?br /> 為了能支持隱式intent,activity、service和broadcast receiver會包含1到多個intent filter。每個intent filter描述組件的可接收一組intent的能力。在intent filter中,說明了可接受的類型,以及不想要的intent。隱式的intent要想投遞到一個組件,只需通過組件的一個filter即可。組件把filter分成多個,是為了針對具體不同的任務(wù)。
在sample中的Note pad示例中,NoteEditor activity有兩個filter,一個用于啟動并打開指定的note,另一個是為了打開新的空的note。一個intent filter是一個IntentFilter類的實例。但是,android系統(tǒng)必須在組件未啟動的情況下就知道它的能力,因此intent filter一般不會在java代碼中設(shè)置,而是在應(yīng)用的manifest文件中作為<intent-filter>元素的方式聲明。一個例外是,為broadcast receiver注冊動態(tài)的filter,可以調(diào)用Context.registerReceiver()方法,通過直接實例化IntentFilter對象創(chuàng)建。filter有三個平等的部分:action、data和category。隱式intent將測試這三個部分。一個intent要想投遞到一個組件,那么這三個測試都要通過才行。當(dāng)然如果組件有多個intent filter,可能一個intent沒有通過,但是通過了另外的一個,這樣也可以把intent投遞到組件。
需要注意的是:如果一個Intent 可以通過多個activity或者filter的filter,那么用戶將會被詢問需要激活哪個組件。 如果一個都沒有的話,將會拋出異常?梢栽贗ntent Filter的節(jié)點里添加一個可選的標(biāo)簽。最高等級的組件會返回。