第四講:Activity入門指南

本節內容
理解Activity
Activity的生命週期
實例:觀察翻轉屏幕導致的Activity狀態變化

點此下載:Android學習指南第四講源代碼

一、理解Activity

Activity是Android程序的4大組件之一。
Activity是Android程序的表示層。程序的每一個顯示屏幕就是一個Activity。
學過WEB開發的同學,可以把Activity理解成網頁中的一個JSP文件;或者你可以把它理解成一個Windows的窗口。

下面看一下Activity類的繼承關係:

從這裏可以看到Activity是Context類的子類,大家對此先有個印象。

二、理解Activity的生命週期

手機最重要也是最基礎的功能是打電話,也就意味着電話來的時候可能隨時要把現在的程序暫停,如果電量不足的時候也可能隨時要把現有程序關閉;因此Android程序和電腦上的程序有所不同,具體到Activity,Activity的生命週期不是自身控制的,而是由Android系統控制的。

在android中Activity有四種基本狀態:
1、Running

位於屏幕最前端時,此時處於可見狀態,和用戶可交互的狀態。
2、Paused
當Acitivy被另一個透明的或者非全屏的Activity覆蓋時的狀態叫Paused狀態,雖然可見但不可交互。
3、Stop
當Activity被另外一個Activity覆蓋、界面不可見時處於Stop狀態。
4、Killed
Activity被系統殺死或者跟本沒啓動時就是Killed狀態。

我們下面看一下Activity的生命週期:

下面是上圖的簡單翻譯版本:

Activity棧:
Android通過Activity棧的方式來管理Activity。


正在運行的Activity 處在在棧的最頂端,它是運行狀態的;

當有新Activity進入屏幕最上端時,原來的Activity就會被壓入第二層,如果他的屏幕沒有被完全遮蓋,那麼他處於Pause狀態,如果他被遮蓋那麼他處於Stop狀態。

當然不管你出於任何一層,都可能在系統覺得資源不足時被強行關閉,當然關閉時在棧底的程序最先被關閉。

譬如:當你在程序中調用 Activity.finish()方法時,結果和用戶按下 BACK 鍵一樣:他告訴 Activity Manager該Activity實例可以被“回收”。隨後 Activity Manager 激活處於棧第二層的 Activity 並重新入棧,把原 Activity 壓入到棧的第二層,從 Running 狀態轉到 Paused 狀態。

三.實例:觀察翻轉屏幕導致的Activity狀態變化

Activity類中定義了和生命週期相關的一些方法,這些方法會在狀態改變時被調用,譬如創建時調用的方法onCreate()。因此我們可以寫一個程序,在程序的每個一個方法中寫註釋,然後看看運行時註釋的打印順序來跟蹤Activity的狀態變化。

本實例的具體視頻創建及演示過程可以參見視頻:觀察翻轉屏幕導致的Activity狀態變化

下面是程序代碼:

package android.basic.lesson4;

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

public class MainActivityLife extends Activity {
String tag =”[MainActivityLife]“;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Log.i(tag, “onCreate”);
}

@Override
public void onStart(){
super.onStart();
Log.i(tag, “onStart”);
}

@Override
public void onPause(){
super.onPause();
Log.i(tag, “onPause”);
}

@Override
public void onResume(){
super.onResume();
Log.i(tag, “onResume”);
}

@Override
public void onStop(){
super.onStop();
Log.i(tag, “onStop”);
}

@Override
public void onDestroy(){
super.onDestroy();
Log.i(tag, “onDestroy”);
}
}

然後調出LogCat工具,來觀察程序的運行細節。通過LogCat的過濾器我們可以看到程序啓動、屏幕翻轉、按後退鍵程序退出的過程,這有助於我們驗證剛纔所學的知識。

lesson4_life

我們可以看到屏幕翻轉時,Android系統把ActivityLife這個Activity先殺死(具體順序是先暫停、後關閉再銷燬),然後再啓動(具體順序是先創建,後啓動再恢復)。通過這個例子我們也清楚的看到了,是Android系統而不是程序員在控制Activity的生命週期。

本節課就到這裏。

 

 

轉自: http://android.yaohuiji.com/archives/141

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章