Android 活動(dòng)(Activity)

2021-10-21 11:40 更新

Android 活動(dòng)(Activity)

活動(dòng)代表了一個(gè)具有用戶界面的單一屏幕,如 Java 的窗口或者幀。Android 的活動(dòng)是 ContextThemeWrapper 類的子類。

如果你曾經(jīng)用 C,C++ 或者 Java 語言編程,你應(yīng)該知道這些程序從 main() 函數(shù)開始。很類似的,Android 系統(tǒng)初始化它的程序是通過活動(dòng)中的 onCreate() 回調(diào)的調(diào)用開始的。存在有一序列的回調(diào)方法來啟動(dòng)一個(gè)活動(dòng),同時(shí)有一序列的方法來關(guān)閉活動(dòng),如下面的活動(dòng)聲明周期圖所示:

圖片

Activity 類定義了下面的回調(diào)。你可以不用實(shí)現(xiàn)所有的回調(diào)方法。當(dāng)了解其中的每一個(gè)非常的重要,實(shí)現(xiàn)這些可以保證你的應(yīng)用行為如用戶所期望的那樣。

回調(diào)描述
onCreate()這是第一個(gè)回調(diào),在活動(dòng)第一次創(chuàng)建是調(diào)用
onStart()這個(gè)回調(diào)在活動(dòng)為用戶可見時(shí)被調(diào)用
onResume()這個(gè)回調(diào)在應(yīng)用程序與用戶開始可交互的時(shí)候調(diào)用
onPause()被暫停的活動(dòng)無法接受用戶輸入,不能執(zhí)行任何代碼。當(dāng)當(dāng)前活動(dòng)將要被暫停,上一個(gè)活動(dòng)將要被恢復(fù)是調(diào)用
onStop()當(dāng)活動(dòng)不在可見時(shí)調(diào)用
onDestroy()當(dāng)活動(dòng)被系統(tǒng)銷毀之前調(diào)用
onRestart()當(dāng)活動(dòng)被停止以后重新打開時(shí)調(diào)用

實(shí)例

這個(gè)實(shí)例通過簡(jiǎn)單地步驟展示 Anroid 應(yīng)用程序活動(dòng)的生命周期。按照下面的步驟來修改我們?cè)?Hello World 實(shí)例章節(jié)中創(chuàng)建的 Android 應(yīng)用程序。

步驟描述
1使用eclipse IDE來創(chuàng)建一個(gè)Android應(yīng)用程序,并命名為HelloWorld放在com.example.helloworld包下。如之前Hello World Example章節(jié)中介紹。
2按照下面修改主要活動(dòng)文件MainActivity.java。保持其他部分不變。
3運(yùn)行應(yīng)用程序來打開Android模擬器,并檢查應(yīng)用程序的修改結(jié)果。

下面是主要活動(dòng)文件src/com.example.helloworld/MainActivity.java修改的內(nèi)容。里面包含每一個(gè)基本的生命周期方法。Log.d()方法用來生成日志信息:

package com.example.helloworld;

import android.os.Bundle;
import android.app.Activity;
import android.util.Log;

public class MainActivity extends Activity {
   String msg = "Android : ";

   /** 當(dāng)活動(dòng)第一次被創(chuàng)建時(shí)調(diào)用 */
   @Override
   public void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.activity_main);
      Log.d(msg, "The onCreate() event");
   }

   /** 當(dāng)活動(dòng)即將可見時(shí)調(diào)用 */
   @Override
   protected void onStart() {
      super.onStart();
      Log.d(msg, "The onStart() event");
   }

   /** 當(dāng)活動(dòng)可見時(shí)調(diào)用 */
   @Override
   protected void onResume() {
      super.onResume();
      Log.d(msg, "The onResume() event");
   }

   /** 當(dāng)其他活動(dòng)獲得焦點(diǎn)時(shí)調(diào)用 */
   @Override
   protected void onPause() {
      super.onPause();
      Log.d(msg, "The onPause() event");
   }

   /** 當(dāng)活動(dòng)不再可見時(shí)調(diào)用 */
   @Override
   protected void onStop() {
      super.onStop();
      Log.d(msg, "The onStop() event");
   }

   /** 當(dāng)活動(dòng)將被銷毀時(shí)調(diào)用 */
   @Override
   public void onDestroy() {
      super.onDestroy();
      Log.d(msg, "The onDestroy() event");
   }
}

活動(dòng)類從項(xiàng)目的res/layout中的XML文件加載所有的UI組件。下面的語句從res/layout/activity_main.xml文件中加載UI組件:

setContentView(R.layout.activity_main);

一個(gè)應(yīng)用程序可以有1個(gè)或多個(gè)活動(dòng),而沒有任何限制。每個(gè)為應(yīng)用程序所定義的活動(dòng)都需要在AndroidManifest.xml中聲明。應(yīng)用的主要活動(dòng)需要在清單中聲明,且意圖過濾器標(biāo)簽中需要包含 MAIN 動(dòng)作和 LAUNCHER 類別。如下:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
   package="com.example.helloworld"
   android:versionCode="1"
   android:versionName="1.0" >

   <uses-sdk
      android:minSdkVersion="8"
      android:targetSdkVersion="22" />

   <application
       android:icon="@drawable/ic_launcher"
       android:label="@string/app_name"
       android:theme="@style/AppTheme" >

       <activity
          android:name=".MainActivity"
          android:label="@string/title_activity_main" >

          <intent-filter>
             <action android:name="android.intent.action.MAIN" />
             <category android:name="android.intent.category.LAUNCHER"/>
          </intent-filter>

       </activity>

   </application>
</manifest>

不論是 MAIN 動(dòng)作還是 LAUNCHER 類別沒有在活動(dòng)中聲明,那么應(yīng)用程序的圖標(biāo)將不會(huì)出現(xiàn)在主屏幕的應(yīng)用列表中。

讓我們運(yùn)行起剛剛修改的 "Hellow World!" 應(yīng)用程序。假設(shè)你在環(huán)境搭建的時(shí)候已經(jīng)創(chuàng)建了 AVD 。從 Eclipse 運(yùn)行應(yīng)用,打開一個(gè)項(xiàng)目中的活動(dòng)文件,并從工具欄點(diǎn)擊運(yùn)行圖片圖標(biāo)。Eclipse在AVD上安裝應(yīng)用并啟動(dòng)它。如果一切順利,將顯示模擬器屏幕如下,同時(shí)你可以在Eclipse IDE的LogCat窗口中看到日志信息:

07-19 15:00:43.405: D/Android :(866): The onCreate() event
07-19 15:00:43.405: D/Android :(866): The onStart() event
07-19 15:00:43.415: D/Android :(866): The onResume() event

讓我們點(diǎn)擊 Android 模擬器上的紅色按鈕圖片,它將在Eclipse IDE的LogCat窗口中產(chǎn)生如下的事件消息:

<code>07-19 15:01:10.995: D/Android :(866): The onPause() event
07-19 15:01:12.705: D/Android :(866): The onStop() event
</code>

讓我們?cè)俅吸c(diǎn)擊 Android 模擬器上的菜單按鈕圖片,它將在 Eclipse IDE 的 LogCat 窗口中產(chǎn)生如下的事件消息:

<code>07-19 15:01:13.995: D/Android :(866): The onStart() event
07-19 15:01:14.705: D/Android :(866): The onResume() event
</code>

接下來,讓我們點(diǎn)擊Android模擬器上的返回按鈕圖片,它將在Eclipse IDE的LogCat窗口中產(chǎn)生如下的事件消息,Android 應(yīng)用程序上活動(dòng)的整個(gè)生命周期完成。

07-19 15:33:15.687: D/Android :(992): The onPause() event
07-19 15:33:15.525: D/Android :(992): The onStop() event
07-19 15:33:15.525: D/Android :(992): The onDestroy() event


以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)