Activity的隱式呼叫和顯示呼叫
阿新 • • 發佈:2019-01-09
在實際開發中,我們知道Activity之間及Android應用程式之間的通訊都少不了Intent的使用,而Intent主要負責對應用中一次操作的動作、動作涉及資料、附加資料進行描述,然後Android據此Intent的描述來找到對應的元件,將Intent傳遞給呼叫的元件,並完成元件的呼叫。
Intent分為兩種:
顯式Intent(Explicit intent):通過指定Intent元件名稱來實現的,它一般用在知道目標元件名稱的前提下,一般是在相同的應用程式內部實現的。
隱式Intent(Implicit intent):通過Intent Filter來實現的,它一般用在沒有明確指出目標元件名稱的前提下,一般是用於在不同應用程式之間。
1、顯示Intent
比如點選一個按鈕,明確的啟動一個指定的Activity元件–設定模組:
Intent intent=new Intent(MainActivity.this,SettingActivity.class);
intent.putExtra(EXTRA,contentEditText.getText().toString());
startActivity(intent);
而Manifest檔案描述為:
<application android:icon="@drawable/icon" android:label="@string/app_name" >
<activity android:name=".MainActivity"
android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name=".SettingActivity"
android:label="@string/app_name">
</activity>
</application>
2、隱士Intent
隱式不明確指定啟動哪個Activity,而是在Intent Filter中設定Action、Data、Category,讓系統來篩選出合適的Activity。
如:
// 例項化Intent
Intent intent = new Intent();
//設定Intent的Action屬性
intent.setAction("android.intent.action.SEND");
// 啟動Activity
startActivity(intent);
而Manifest檔案新增Intent Filter配置:
<application android:icon="@drawable/icon" android:label="@string/app_name">
<activity android:name=".MainActivity"
android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name=".SettingActivity"
android:label="@string/app_name">
</activity>
<activity android:name=".SecondActivity" >
<intent-filter>
<action android:name = "android.intent.action.SEND" />
<category android:name = "android.intent.category.DEFAULT" />
</intent-filter>
</activity>
</application>
action可以增加多個,那麼如果有多個Activity都被匹配到了,則系統會彈出一個列出所有已被匹配到的應用程式的列表選項。
對於顯示Intent,Android不需要去做解析,因為目標元件很明確。而隱式Intent需要通過解析,將Intent對映給可以處理該Intent的Activity,Service等。Intent的解析機制主要是通過查詢已經註冊在AndroidManifest.xml中的所有Intent Filter以及其中定義的action,最終找到匹配的Intent。