Android解析Intent Filter的方法
本文實(shí)例講述了Android解析Intent Filter的方法。分享給大家供大家參考。具體分析如下:
匿名性質(zhì)的運(yùn)行時(shí)綁定使得理解Android如何解析一個(gè)隱式Intent到一個(gè)特定的應(yīng)用程序組件變得重要。
和你之前看到的一樣,當(dāng)使用startActivity時(shí),隱式Intent解析到一個(gè)單一的Activity。如果存在多個(gè)Activity都有能力在特定的數(shù)據(jù)上執(zhí)行給定的動(dòng)作的話,Android會(huì)從這些中選擇最好的進(jìn)行啟動(dòng)。
決定哪個(gè)Activity來(lái)運(yùn)行的過(guò)程稱(chēng)為Intent解析。Intent解析的目的是通過(guò)下面的過(guò)程找到可能匹配得最好的Intent Filter:
1. Android把安裝的包中可獲得的Intent Filter放到一個(gè)列表中。
2. 動(dòng)作和與正在解析的Intent的種類(lèi)不關(guān)聯(lián)的Intent Filter會(huì)從列表中刪除。
①. 動(dòng)作匹配指Intent Filter包含特定的動(dòng)作或沒(méi)有指定的動(dòng)作。一個(gè)Intent Filter有一個(gè)或多個(gè)定義的動(dòng)作,如果沒(méi)有任何一個(gè)能與Intent指定的動(dòng)作匹配的話,這個(gè)Intent Filter在算作是動(dòng)作匹配檢查失敗。
②. 種類(lèi)匹配更為嚴(yán)格。Intent Filter必須包含所有在解析的Intent中定義的種類(lèi)。一個(gè)沒(méi)有特定種類(lèi)的Intent Filter只能與沒(méi)有種類(lèi)的Intent匹配。
3. 最后,Intent的數(shù)據(jù)URI中的部分會(huì)與Intent Filter中的data標(biāo)簽比較。如果Intent Filter定義scheme,host/authority,path或mimetype,這些值都會(huì)與Intent的URI比較。任何不匹配都會(huì)導(dǎo)致Intent Filter從列表中刪除。
沒(méi)有指定data值的Intent Filter會(huì)和所有的Intent數(shù)據(jù)匹配。
①. mimetype是正在匹配的數(shù)據(jù)的數(shù)據(jù)類(lèi)型。當(dāng)匹配數(shù)據(jù)類(lèi)型時(shí),你可以使用通配符來(lái)匹配子類(lèi)型(例如,earthquakes/*)。如果Intent Filter指定一個(gè)數(shù)據(jù)類(lèi)型,它必須與Intent匹配;沒(méi)有指定數(shù)據(jù)的話全部匹配。
②. scheme是URI部分的協(xié)議——例如,http:,mailto:,tel:。
③. host-name或“data authority”是介于URI中scheme和path之間的部分(例如,www.google.com)。匹配主機(jī)名時(shí),Intent Filter的scheme也必須通過(guò)匹配。
④. 數(shù)據(jù)path是緊接在“data authority”的后面(例如,/ig)。path只在scheme和host-name部分都匹配的情況下才匹配。
4. 如果這個(gè)過(guò)程中多于一個(gè)組件解析出來(lái)的話,它們會(huì)以?xún)?yōu)先度來(lái)排序,可以在Intent Filter的節(jié)點(diǎn)里添加一個(gè)可選的標(biāo)簽。最高等級(jí)的組件會(huì)返回。
Android本地的應(yīng)用程序組件和第三方應(yīng)用程序一樣,都是Intent解析過(guò)程中的一部分。它們沒(méi)有更高的優(yōu)先度,可以被新的Activity完全的代替,這些新的Activity宣告自己的Intent Filter能響應(yīng)相同的動(dòng)作請(qǐng)求。
希望本文所述對(duì)大家的Android程序設(shè)計(jì)有所幫助。
相關(guān)文章
在Android線程池里運(yùn)行代碼任務(wù)實(shí)例
這篇文章主要介紹了在Android線程池里運(yùn)行代碼任務(wù)實(shí)例,同時(shí)介紹了線程池中停止任務(wù)的方法,需要的朋友可以參考下2014-06-06
Android recyclerview實(shí)現(xiàn)拖拽排序和側(cè)滑刪除
這篇文章主要為大家詳細(xì)介紹了Android recyclerview實(shí)現(xiàn)拖拽排序和側(cè)滑刪除,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-02-02
Android中多個(gè)ContentProvider的初始化順序詳解
在日常Android開(kāi)發(fā)中經(jīng)常會(huì)寫(xiě)一些sdk來(lái)供他人或者自己調(diào)用,一般這些sdk都涉及到初始化,下面這篇文章主要給大家介紹了關(guān)于Android中多個(gè)ContentProvider的初始化順序的相關(guān)資料,需要的朋友可以參考下2022-04-04
Android解析相同接口返回不同格式j(luò)son數(shù)據(jù)的方法
這篇文章主要介紹了Android解析相同接口返回不同格式j(luò)son數(shù)據(jù)的方法,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-08-08
Android編程開(kāi)發(fā)中ListView的常見(jiàn)用法分析
這篇文章主要介紹了Android編程開(kāi)發(fā)中ListView的常見(jiàn)用法,較為詳細(xì)的分析了ListView的功能及常見(jiàn)使用方法,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-10-10
Android安卓中循環(huán)錄像并檢測(cè)內(nèi)存卡容量
這篇文章主要介紹了Android安卓中循環(huán)錄像并檢測(cè)內(nèi)存卡容量,當(dāng)內(nèi)存卡空間已滿時(shí),本文還實(shí)現(xiàn)自動(dòng)刪除視頻列表里面的第一個(gè)文件,需要的朋友可以參考下2015-06-06

