Android顯示與隱式的區別
定義:
Intent定義:Intent是一種在不同元件之間傳遞的請求訊息,是應用程式發出的請求和意圖。作為一個完整的訊息傳遞機制,Intent不僅需要傳送端,還需要接收端。
顯式Intent定義:對於明確指出了目標元件名稱的Intent,我們稱之為顯式Intent。
隱式Intent定義:對於沒有明確指出目標元件名稱的Intent,則稱之為隱式Intent。
說明:Android系統使用IntentFilter 來尋找與隱式Intent相關的物件。
詳細解釋:
顯式Intent直接用元件的名稱定義目標元件,這種方式很直接。但是由於開發人員往往並不清楚別的應用程式的元件名稱,因此,顯式Intent更多用於在應用程式內部傳遞訊息
隱式Intent恰恰相反,它不會用元件名稱定義需要啟用的目標元件,它更廣泛地用於在不同應用程式之間傳遞訊息。
在顯式Intent訊息中,決定目標元件的唯一要素就是元件名稱,因此,如果你的Intent中已經明確定義了目標元件的名稱,那麼你就完全不用再定義其他Intent內容。
而對於隱式Intent則不同,由於沒有明確的目標元件名稱,所以必須由Android系統幫助應用程式尋找與Intent請求意圖最匹配的元件。
Android系統尋找與Intent請求意圖最匹配的元件具體的選擇方法 是:Android將Intent的請求內容和一個叫做IntentFilter的過濾器比較,IntentFilter中包含系統中所有可能的待選元件。
如果IntentFilter中某一元件匹配隱式Intent請求的內容,那麼Android就選擇該元件作為該隱式Intent的目標元件。
Android如何知道應用程式能夠處理某種型別的Intent請求呢?這需要應用程式在Android-Manifest.xml中宣告自己所含元件的過濾器(即可以匹配哪些Intent請求)。
一個沒有宣告Intent-Filter的元件只能響應指明自己名字的顯式Intent請求,而無法響應隱式Intent請求。
而一個聲明瞭IntentFilter的元件既可以響應顯式Intent請求,也可以響應隱式Intent請求。在通過和 IntentFilter比較來解析隱式Intent請求時,Android將以下三個因素作為選擇的參考標準。
Action
Data
Category
而Extra和Flag在解析收到Intent時是並不起作用的。