天天看點

Activity初識

1. cactivity概念

首先Acitivity可以了解為使用者與應用互動的一個入口點,一個應用可以有多個Activity。當一個應用調用另一個應用時,調用方調用的是另一個應用的Activity,而不是整個應用。

Activity提供視窗供應用在其中繪制界面,此視窗通常鋪滿螢幕,也有可能視窗小于螢幕的大小,通常一個Activity實作應用中的一個螢幕,比如一個Activity實作“偏好設定”這個螢幕,另一個Activity實作“選擇照片”這一螢幕。

大多數應用包含多個螢幕,這意味着它們包含多個Activity,通常應用中有一個Activity是應用的主Activity,這是使用者啟用應用出現的第一個螢幕。每個Activity可以啟動另一個Activity,例如,一個簡單的電子郵件應用中的主 Activity 可能會提供顯示電子郵件收件箱的螢幕。主 Activity 可能會從該螢幕啟動其他 Activity,以提供執行寫郵件和打開郵件這類任務的螢幕,事實上,Activity 經常會啟動屬于其他應用的 Activity。例如,浏覽器應用可能會啟動社交媒體應用的“分享”Activity。

要使用Activity需要在清單檔案中注冊Activity,并适當的管理Activity的生命周期。

2.配置清單

聲明Activity

要聲明Activity,需要打開清單檔案,在中添加,例如:

<manifest ... >
      <application ... >
          <activity android:name=".ExampleActivity" />
          ...
      </application ... >
      ...
    </manifest >
    
           

該元素唯一的必要屬性是android: name,表示activity的類名稱,根據需要,我們也可以定義标簽,圖示等activity的屬性。

聲明Intent過濾

intent過濾器是一項非常強大的功能,它可以實作Intent的顯式跳轉或隐式跳轉。例如,顯式跳轉會告知系統啟動某一個具體的Activity,隐式跳轉則是啟動任何能完成此工作的Activity。Intent過濾器的作用就是告知系統界面詢問哪個Activity來執行任務。

使用此功能,需要在中注冊屬性,此元素定義包括元素,以及可選的元素或元素,例如:

<activity android:name=".ExampleActivity" android:icon="@drawable/app_icon">
        <intent-filter>
            <action android:name="android.intent.action.SEND" />
            <category android:name="android.intent.category.DEFAULT" />
            <data android:mimeType="text/plain" />
        </intent-filter>
    </activity>
    
    
           

以上代碼action指定了該Activity會發送資料,category 生命為DEFAULT可使Activity能夠接收啟動請求,data指定發送的資料類型。以下代碼展示了如何在代碼中調用上述Activity:

val sendIntent = Intent().applay {
      action = Intent.ACTION_SEND
      type = "text/plain"
      putExtra(Intent.EATRA_MSG, textMsg)
}
startActivity(sendIntent)
           

聲明權限

使用清單的 标記來控制哪些應用可以啟動某個 Activity。父 Activity 和子 Activity 必須在其清單中具有相同的權限,前者才能啟動後者。如果為父 Activity 聲明了 元素,則每個子 Activity 都必須具有比對的 元素。示例如下:

<manifest>
    <activity android:name="...."
       android:permission=”com.google.socialapp.permission.SHARE_POST”

    />

           

為了能夠調用上述Activity,調用方應用必須也具有相同的權限:

<manifest>
       <uses-permission android:name="com.google.socialapp.permission.SHARE_POST" />
    </manifest>