W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗值獎勵
在啟動目標Ability時,會通過顯式Want和隱式Want進行目標Ability的匹配,這里說的匹配規(guī)則就是調(diào)用方Want中設置的參數(shù)如何與目標Ability聲明的配置文件進行匹配。
顯式Want匹配原理
名稱 | 類型 | 匹配項 | 必選 | 規(guī)則 |
---|---|---|---|---|
deviceId | string | 是 | 否 | 留空將僅匹配本設備內(nèi)Ability。 |
bundleName | string | 是 | 是 | 如果指定abilityName,而不指定bundleName,則匹配失敗。 |
moduleName | string | 是 | 否 | 留空時當同一個應用內(nèi)存在多個模塊且模塊間存在重名Ability,將默認匹配第一個。 |
abilityName | string | 是 | 是 | 該字段必須設置表示顯式匹配。 |
uri | string | 否 | 否 | 系統(tǒng)匹配時將忽略該參數(shù),但仍可作為參數(shù)傳遞給目標Ability。 |
type | string | 否 | 否 | 系統(tǒng)匹配時將忽略該參數(shù),但仍可作為參數(shù)傳遞給目標Ability。 |
action | string | 否 | 否 | 系統(tǒng)匹配時將忽略該參數(shù),但仍可作為參數(shù)傳遞給目標Ability。 |
entities | Array<string> | 否 | 否 | 系統(tǒng)匹配時將忽略該參數(shù),但仍可作為參數(shù)傳遞給目標Ability。 |
flags | number | 否 | 否 | 不參與匹配,直接傳遞給系統(tǒng)處理,一般用來設置運行態(tài)信息,例如URI數(shù)據(jù)授權等。 |
parameters | {[key: string]: any} | 否 | 否 | 不參與匹配,應用自定義數(shù)據(jù)將直接傳遞給目標Ability。 |
隱式Want匹配原理
名稱 | 類型 | 匹配項 | 必選 | 規(guī)則 |
---|---|---|---|---|
deviceId | string | 是 | 否 | 跨設備目前不支持隱式調(diào)用。 說明 當前版本暫不支持跨設備能力。 |
abilityName | string | 否 | 否 | 該字段必須留空表示隱式匹配。 |
bundleName | string | 是 | 否 | - 聲明bundleName時,隱式搜索將僅限于對應應用包內(nèi)。 - 聲明bundleName與moduleName時,隱式搜索將僅限于對應應用的對應Module內(nèi)。 - 單獨聲明moduleName時,該字段無效。 - 同時聲明bundleName與moduleName時,隱式搜索將僅限于對應應用包內(nèi)的對應模塊內(nèi)。 這些字段將用來隱式匹配,具體規(guī)則可參考隱式Want匹配原理詳解。 |
moduleName | string | 是 | 否 | - |
uri | string | 是 | 否 | - |
type | string | 是 | 否 | - |
action | string | 是 | 否 | - |
entities | Array<string> | 是 | 否 | - |
flags | number | 否 | 否 | 不參與匹配,直接傳遞給系統(tǒng)處理,一般用來設置運行態(tài)信息,例如URI數(shù)據(jù)授權等。 |
parameters | {[key: string]: any} | 否 | 否 | 不參與匹配,應用自定義數(shù)據(jù)將直接傳遞給目標Ability。 |
從隱式Want的定義,可得知:
調(diào)用方傳入的want參數(shù),表明調(diào)用方需要執(zhí)行的操作,并提供相關數(shù)據(jù)以及其他應用類型限制。
待匹配Ability的skills配置,聲明其具備的能力(module.json5配置文件中的skills標簽參數(shù))。
系統(tǒng)將調(diào)用方傳入的want參數(shù)(包含action、entities、uri和type屬性)與已安裝待匹配的應用Ability的skills配置(包含actions、entities、uris和type屬性)依次進行匹配。當四個屬性匹配均通過,則此應用才會被應用選擇器展示給用戶進行選擇。
將調(diào)用方傳入的want參數(shù)的action與待匹配Ability的skills配置中的actions進行匹配。
調(diào)用方傳入的want參數(shù)的action不為空,待匹配Ability的skills配置中的actions為空,則action匹配失敗。
調(diào)用方傳入的want參數(shù)的action為空,待匹配Ability的skills配置中的actions不為空,則action匹配成功。
調(diào)用方傳入的want參數(shù)的action不為空,待匹配Ability的skills配置中的actions不為空且包含調(diào)用方傳入的want參數(shù)的action,則action匹配成功。
調(diào)用方傳入的want參數(shù)的action不為空,待匹配Ability的skills配置中的actions不為空且不包含調(diào)用方傳入的want參數(shù)的action,則action匹配失敗。
圖1 want參數(shù)的action匹配規(guī)則
將調(diào)用方傳入的want參數(shù)的entities與待匹配Ability的skills配置中的entities進行匹配。
調(diào)用方傳入的want參數(shù)的entities為空,待匹配Ability的skills配置中的entities不為空,則entities匹配成功。
調(diào)用方傳入的want參數(shù)的entities為空,待匹配Ability的skills配置中的entities為空,則entities匹配成功。
調(diào)用方傳入的want參數(shù)的entities不為空,待匹配Ability的skills配置中的entities為空,則entities匹配失敗。
調(diào)用方傳入的want參數(shù)的entities不為空,待匹配Ability的skills配置中的entities不為空且包含調(diào)用方傳入的want參數(shù)的entities,則entities匹配成功。
調(diào)用方傳入的want參數(shù)的entities不為空,待匹配Ability的skills配置中的entities不為空且不完全包含調(diào)用方傳入的want參數(shù)的entities,則entities匹配失敗。
圖2 want參數(shù)的entities匹配規(guī)則
調(diào)用方傳入的want參數(shù)中設置uri和type參數(shù)發(fā)起組件啟動請求,系統(tǒng)會遍歷當前系統(tǒng)已安裝的組件列表,并逐個匹配待匹配Ability的skills配置中的uris數(shù)組,如果待匹配Ability的skills配置中的uris數(shù)組中只要有一個可以匹配調(diào)用方傳入的want參數(shù)中設置的uri和type即為匹配成功。
圖3 want參數(shù)中uri和type皆不為空時的匹配規(guī)則
實際應用中,uri和type共存在四種情況,下面將講解四種情況的具體匹配規(guī)則:
調(diào)用方傳入的want參數(shù)的uri和type都為空。
調(diào)用方傳入的want參數(shù)的uri不為空,type為空。
調(diào)用方傳入的want參數(shù)的uri為空,type不為空。
調(diào)用方傳入的want參數(shù)的uri和type都不為空,如圖3所示。
下圖為了簡化描述,稱want中傳入的uri為w_uri,稱want中傳入的type為w_type, 待匹配Ability的skills配置中uris為s_uris,其中每個元素為s_uri;按自上而下順序匹配。
圖4 want參數(shù)中uri和type的具體匹配規(guī)則
這里為了簡化描述,稱want中傳入的uri為w_uri,待匹配Ability的skills配置中uri為s_uri,具體的匹配規(guī)則如下:
如果s_uri的scheme為空,當w_uri為空時匹配成功,否則匹配失敗;
如果s_uri的host為空,當w_uri和s_uri的scheme相同時匹配成功,否則匹配失敗;
如果s_uri的path、pathStartWith和pathRegex都為空,當w_uri和s_uri完全相同時匹配成功,否則匹配失?。?/p>
如果s_uri的path不為空,當w_uri和s_uri全路徑表達式相同時匹配成功,否則繼續(xù)進行pathStartWith的匹配;
如果s_uri的pathStartWith不為空,當w_uri包含s_uri前綴表達式時匹配成功,否則繼續(xù)進行pathRegex的匹配;
如果s_uri的pathRegex不為空,當w_uri滿足s_uri正則表達式時匹配成功,否則匹配失?。?/p>
待匹配Ability的skills配置的uris中scheme、host、port、path、pathStartWith和pathRegex屬性拼接,如果依次聲明了path、pathStartWith和pathRegex屬性時,uris將分別拼接為如下三種表達式:
全路徑表達式:scheme://host:port/path
前綴表達式:scheme://host:port/pathStartWith
正則表達式:scheme://host:port/pathRegex
此小節(jié)所述的type匹配規(guī)則的適用性需建立在want參數(shù)內(nèi)type不為空的基礎上。當want參數(shù)內(nèi)type為空時請參考want參數(shù)的uri和type匹配規(guī)則。
這里為了簡化描述,稱want中傳入的uri為w_type,待匹配Ability的skills數(shù)組中uris的type數(shù)據(jù)為s_type,具體的匹配規(guī)則如下:
如果s_type為空,則匹配失敗。
如果s_type或者w_type為通配符"*/*",則匹配成功。
如果s_type最后一個字符為通配符'*',如"prefixType/*",則當w_type包含"prefixType/"時匹配成功,否則匹配失敗。
如果w_type最后一個字符為通配符'*',如"prefixType/*",則當s_type包含"prefixType/"時匹配成功,否則匹配失敗。
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網(wǎng)安備35020302033924號
違法和不良信息舉報電話:173-0602-2364|舉報郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: