活動簡介

Activity 類別是 Android 的重要元件 以及活動的啟動方式 是平台應用程式模型的一部分有別於 Google Cloud 哪些應用程式可用 main() 方法啟動 系統會在 Activity 例項中啟動程式碼 叫用特定回呼方法。 生命週期

本文件介紹活動的概念,並提供一些 並概略說明使用方式 如要進一步瞭解建構應用程式的最佳做法, 請參閱 應用程式架構指南

活動的概念

行動應用程式體驗與電腦版應用程式不同 使用者與應用程式的互動不一定會從同一處開始。 因為使用者歷程通常是非確定的開始。 舉例來說,從主畫面開啟電子郵件應用程式時,系統可能會顯示 電子郵件清單。相較之下,如果使用社群媒體應用程式 啟動電子郵件應用程式,您可以直接前往電子郵件應用程式的畫面 撰寫電子郵件

Activity 類別的設計宗旨是協助簡化這個模式。 當某個應用程式叫用另一個應用程式時,發出呼叫的應用程式會叫用另一個應用程式的活動 應用程式,而不是整個應用程式這樣一來,該活動就成了 應用程式與使用者互動的進入點。您會實作 做為 Activity 類別的子類別

活動會提供應用程式繪圖的視窗 使用者介面。此視窗通常會填滿整個螢幕,但可能會小於 並漂浮在其他視窗上方。一般而言,單一活動 會在應用程式中實作一個畫面。舉例來說,某個應用程式的其中一項活動 實作「Preferences」畫面,而另一個活動則會實作 「Select Photo」(選取相片) 畫面。

大多數應用程式都包含多個畫面,也就是說 活動。一般來說,應用程式中的一項活動會指定為 main 活動,這是使用者啟動應用程式時顯示的第一個畫面。 每項活動皆可開始另一個活動,以便 執行不同的動作例如,以簡單的電子郵件呈現主要活動 應用程式可能會提供顯示電子郵件收件匣的畫面。接下來 活動可能會啟動其他活動,這些活動會提供 撰寫電子郵件及開啟個別電子郵件

雖然活動會相互配合, 應用程式,每個活動只會大致綁定至其他活動;提供 應用程式活動之間的依附元件通常最小。事實上 活動通常會啟動屬於其他應用程式的活動。例如: 瀏覽器應用程式可能會啟動社群媒體應用程式的「Share」活動。

若要在應用程式中使用活動,您必須在 ,且您必須適當管理活動生命週期。 本文件其他部分會介紹這些主題。

設定資訊清單

為了讓應用程式能使用活動,您必須宣告活動。 和這些屬性的某些屬性

宣告活動

如要宣告活動,請開啟資訊清單檔案 <活動> 做為 <應用程式> 元素。例如:

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

這個元素的唯一必要屬性是 android:name、 會指定活動的類別名稱。你也可以新增 定義活動特性,例如標籤、圖示或 UI 主題。 如要進一步瞭解這些屬性和其他屬性,請參閱 <活動> 元素參考文件

注意: 發布應用程式後, 請勿變更活動設定 。否則,部分功能 (例如應用程式捷徑) 可能會無法正常運作。 如要進一步瞭解發布後應避免的變更,請參閱 無法變更的事項

宣告意圖篩選器

意圖篩選器 是 Android 平台的強大功能他們 能夠用來啟動活動,而不只是基於 明確要求,也可能是「隱含」要求。例如: 明確的要求可能會指示系統「開始傳送電子郵件活動」 。」相對地,隱含要求會指示 系統應該「以任何方式啟動「傳送電子郵件」畫面 可以執行這項工作的活動。」系統 UI 要求使用者選擇要使用的應用程式時 也就是執行工作的意圖篩選器

如要善用此功能,請宣告 <意圖篩選器> 中的屬性 <activity> 元素。這個元素的定義包含 <action> 元素 如有需要, <類別> 元素和/或 <data> 元素。這些元素 ,指定活動可回應的意圖類型。適用對象 舉例來說,下列程式碼片段說明如何設定會使 傳送文字資料,並接收來自其他活動的要求,執行上述操作:

<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> 元素,指定此活動會傳送資料。 宣告 <category> DEFAULT 元素,可讓活動 接收啟動要求。<data> 元素會指定 這項活動可以傳送下列程式碼片段說明如何呼叫 上述活動:

Kotlin

val sendIntent = Intent().apply {
    action = Intent.ACTION_SEND
    type = "text/plain"
    putExtra(Intent.EXTRA_TEXT, textMessage)
}
startActivity(sendIntent)

Java

// Create the text message with a string
Intent sendIntent = new Intent();
sendIntent.setAction(Intent.ACTION_SEND);
sendIntent.setType("text/plain");
sendIntent.putExtra(Intent.EXTRA_TEXT, textMessage);
// Start the activity
startActivity(sendIntent);
如果您希望自己的應用程式能獨立存在,但不允許其他應用程式啟用 您提出的 即可使用任何其他意圖篩選器你不想從事的活動 其他應用程式中不應有意圖篩選器 以便自行使用明確意圖如要進一步瞭解 您的活動可以回應意圖,請參閱「意圖 和意圖篩選器

宣告權限

您可以使用資訊清單的 <activity> 標記即可控制 哪些應用程式可以啟動特定活動。父項活動無法啟動 子活動,除非這兩個活動各自的權限相同 資訊清單。如果您宣告 <uses-permission> 元素,每個子活動都必須具有相符 <uses-permission> 元素。

舉例來說,如果您的應用程式要使用名為「SocialApp」的假設應用程式 如要在社群媒體上分享貼文,SocialApp 本身必須定義權限 呼叫它的應用程式必須符合下列條件:

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

/>

不過,如要允許呼叫 SocialApp,應用程式必須符合 SocialApp 的資訊清單:

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

如需更多關於權限和安全性的一般資訊,請參閱 安全性和權限

管理活動生命週期

在生命週期中,活動會經歷多個狀態。 您會使用一系列回呼來處理狀態之間的轉換。後續章節 這些回呼。

onCreate()

您必須實作這個回呼,在系統建立 活動。您的實作應該初始化 活動:例如,應用程式應建立檢視畫面,並將資料繫結至 清單。最重要的是,您必須呼叫 setContentView() 定義活動使用者介面的版面配置。

onCreate() 完成後, 下一個回呼一律為 onStart()

onStart()

onCreate() 離開時,活動 進入「已開始」狀態,之後使用者就能看到活動。 這個回呼包含活動最後的準備作業數量 移至前景並促進互動

onResume()

系統會在活動開始互動前叫用這個回呼 與使用者產生關聯此時,活動會顯示在活動頂端 並擷取所有使用者輸入內容應用程式的核心功能多半是 透過 onResume() 方法實作。

onPause() 回呼一律 追蹤 onResume()

onPause()

活動遺失時,系統會呼叫 onPause() 就會進入「暫停」狀態舉例來說,如果使用者 輕觸「返回」或「最近」按鈕。當系統呼叫 onPause(),以追蹤你的活動, 嚴格來說,您的活動仍會顯示在部分畫面上,不過在大多數的情況下,這通常表示 使用者退出活動,活動很快就會進入活動狀態 已停止或重新啟用。

處於「已暫停」狀態的活動,即便使用者 預期 UI 更新舉例來說,顯示導覽的一項活動 地圖畫面或播放中的媒體播放器。即使這類活動失去焦點,使用者 預期 UI 會持續更新。

不要使用 onPause(),即可儲存應用程式或使用者 網路資料、發出網路呼叫或執行資料庫交易 如需有關儲存資料的資訊,請參閱 儲存及還原活動狀態。

onPause() 執行完畢後, 下一個回呼為 onStop()onResume(),依進度而定 才能在活動進入「暫停」狀態後發生

onStop()

當應用程式產生回應時,系統會呼叫 onStop() 使用者不會再看到活動。 這可能是因為系統正在刪除活動,還是有新的活動 開始,或是正在進入現有活動 恢復狀態,並覆蓋已停止的活動 在這些情況下,已停止的活動 資料。

系統呼叫的下一個回呼為 onRestart(),如果 使用者返回活動與使用者互動 onDestroy() 如果此活動完全終止。

onRestart()

當活動處於「已停止」狀態時,系統會叫用此回呼 即將重新啟動onRestart() 還原活動停止後的狀態。

此回呼後面一律會加上 onStart()

onDestroy()

系統會在刪除活動前叫用這個回呼。

這個回呼是活動收到的最終回呼。 onDestroy() 是 通常是為了確保活動的所有資源 就會釋出。

本節僅提供這個主題的簡介。如需 活動生命週期及其回呼的詳細處理方式 請參閱活動 Lifecycle