1. 程式人生 > >Activity的隱式呼叫和顯示呼叫

Activity的隱式呼叫和顯示呼叫

在實際開發中,我們知道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。