1.概念區(qū)分
顯式啟動(dòng):按名稱(完全限定類名)指定要啟動(dòng)的組件玖喘,即直接指定要跳轉(zhuǎn)的Activity類名,不用過濾,效率高,適用于同一個(gè)應(yīng)用中的不同Activity跳轉(zhuǎn)音同。
隱式啟動(dòng):不會(huì)指定特定的組件,而是聲明要執(zhí)行的常規(guī)操作,從而允許其他應(yīng)用中的組件來處理它,即通過IntentFilter可以找到所有之匹配的應(yīng)用,適用于不同應(yīng)用之間的Activity跳轉(zhuǎn)。
2.代碼實(shí)現(xiàn)
2.1顯式啟動(dòng)
顯式啟動(dòng)方式一
該方式最常用的对人,通過構(gòu)造方法傳入Component。
Intent intent = new Intent(this, SecondActivity.class);
startActivity(intent);
顯式啟動(dòng)方式二
該方式通過setComponent方法去實(shí)現(xiàn)拂共。
Component component = new Component(this,SecondActivity.class);
Intent intent = new Intent();
intent.setComponent(component);
startActivity(intent);
顯式啟動(dòng)方式三
該方式通過setClass/setClassName方法去實(shí)現(xiàn)牺弄。
Intent intent = new Intent();
intent.setclass(this,SecondActivity.class);
//intent.setClass(this.getPackageName,"com.ydscience.SecondActivity");
startActivity(intent);
2.2隱式啟動(dòng)
在AndroidManifest.xml文件中進(jìn)行聲明,對(duì)Action進(jìn)行自定義宜狐,自定義的名字可以任意寫势告。
<activity android:name=".SecondActivity">
<intent-filter>
<action android:name="com.ydscience"/>
<category android:name="android.intent.category.DEFAULT"/>
</intent-filter>
</activity>
調(diào)用方式如下
Intent intent = new Intent();
intent.setAction("com.ydscience");
intent.addCategory("android.intent.category.DEFAULT");
startActivity(intent);
以上的這種隱式啟動(dòng)方式如何遇到可能沒有任何應(yīng)用處理發(fā)送到
的隱式 Intent,這種情況下會(huì)遇到程序崩潰抚恒,如果要驗(yàn)證 Activity 是否會(huì)接收 隱式啟動(dòng)的Intent咱台,就要對(duì)Intent 對(duì)象調(diào)用 resolveActivity()。
實(shí)現(xiàn)方式如下:
Intent intent = new Intent();
intent.setAction("com.ydscience");
intent.addCategory("android.intent.category.DEFAULT");
if(intent.resolveActivity(getPackageManager())!= null){
startActivity(intent);
}
附Intent七大屬性:由以下各個(gè)組成部分:
component(組件):目的組件
action(動(dòng)作):用來表現(xiàn)意圖的行動(dòng)
category(類別):用來表現(xiàn)動(dòng)作的類別
data(數(shù)據(jù)):表示與動(dòng)作要操縱的數(shù)據(jù)
type(數(shù)據(jù)類型):對(duì)于data范例的描寫
extras(擴(kuò)展信息):擴(kuò)展信息
Flags(標(biāo)志位):期望這個(gè)意圖的運(yùn)行模式