1.顯示Intent
-
描述
顯示Intent的調(diào)用需要明確的指定被啟動對象的組件信息(包括報名和類名)隧饼,通過在Intent上指定明確的組件信息來實現(xiàn)沈堡。 -
使用場景
一般是用在知道目標(biāo)組件名稱的情況下;
在同一應(yīng)用程序內(nèi)部的情況下使用較多燕雁。 -
示例
在MainActivity
中啟動一個名為LoginActivity
的Activity:
// 顯示調(diào)用示例
Intent intent = new Intent();
intent.setClass(MainActivity.this, LoginActivity.class);
startActivity(intent);
2.隱式Intent
-
描述
隱式Intent調(diào)用不需要明確指定被啟動對象的組件信息的诞丽,通過IntentFilter來實現(xiàn),系統(tǒng)會根據(jù)隱式意圖中設(shè)置的Action(行為/動作)贵白、Category(類別)率拒、Data(URI和數(shù)據(jù)類型)找到最合適的組件來處理這個意圖崩泡。 -
使用場景
一般用在沒有明確指出目標(biāo)組件名稱的前提下禁荒;
一般是用于在不同應(yīng)用程序之間责静。 -
IntentFilter的過濾規(guī)則
IntentFilter的過濾信息有action淘菩、category摹量、data季春,只用同時匹配過濾列表中的信息,才可以匹配成功热康,一個Activity中可以有多個intent-filter,一個Intent只要有一組完全匹配就可以成功啟動對應(yīng)的Activity
Action匹配規(guī)則:
action是一個字符串區(qū)分大小寫沛申,要求必須存在且和過濾規(guī)則中的其中一個action相同。
category匹配規(guī)則:
Intent中如果有那么必須和過濾規(guī)則中的一個category相同姐军,如果不設(shè)置category也可以匹配铁材,原因是系統(tǒng)在調(diào)用startActivity
或者startActivityForResult
時默認(rèn)為Intent加上了android.intent.category.DEFAULT
,所以在隱式調(diào)用時必須加<category android:name="android.intent.category.DEFAULT" />
奕锌。
data匹配規(guī)則:
如果在AndroidManifest.xml
里面指定了<data>
這行著觉,那么,需要匹配到它的話惊暴,在代碼里必須要設(shè)置Intent的data饼丘。
-
示例
1.在AndroidManifest.xml
中注冊要啟動的目標(biāo)LoginActivity
:
2.在<activity android:name="com.zihao.LoginActivity" android:screenOrientation="portrait"> <intent-filter> <action android:name="com.zihaoLogin.action" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> </activity>
MainActivity
中通過以下代碼啟動LoginActivity
:Intent intent = new Intent(); intent.setAction("com.zihaoLogin.action"); intent.addCategory("android.intent.category.DEFAULT"); startActivity(intent);
3.Intent顯示/隱式的區(qū)別
-
目標(biāo)差異:顯示Intent有固定的接收方,隱式Intent無固定的接收方辽话。
顯示Intent有明確的被啟動對象的組件信息肄鸽;
隱式Intent沒有明確指出目標(biāo)組件名稱,需要通過IntentFilter過濾匹配油啤。 -
適用場景差異:顯示Intent更適合在同項目下使用典徘,隱式Intent更適合不同項目間的頁面跳轉(zhuǎn)。
同項目下益咬,顯示Intent效率更高烂斋。 -
作用域:顯示Intent不可以跨應(yīng)用使用,隱式Intent可以跨應(yīng)用使用础废。
如果隱式Intent不需要跨應(yīng)用啟動汛骂,在AndroidManifest.xml
中添加android:exported=”false”
配置即可。
原則上评腺,一個Intent中不應(yīng)該既有顯示調(diào)用又有隱式調(diào)用帘瞭,如果一個Intent同時使用了顯示調(diào)用與隱式調(diào)用,則以顯示調(diào)用為主蒿讥。
如果您有更好的建議歡迎評論分享蝶念,如有錯誤,請批評指正芋绸,謝謝媒殉。