第一個Android程序和Activity生命周期
實驗目的
生成運行第一個Android程序,熟悉了解Android手機開發平台的基本構成和使用方法,熟悉Android應用程序項目的基本文件目錄結構,了解開發環境提供的各種工具的基本用法。
在Activity中重載下9種事件函數,在調用不同函數時使用LogCat在Eclipse的控制台中輸出調用日志。掌握Activity在啟動、停止和銷毀等不同階段,9種重載函數的調用順序,並掌握Android調試工具LogCat的使用方法
實驗要求
-
用工程向導生成第一個Android程序,並在模擬器上運行
注意在新建應用的選擇SDK版本時選API 18 -
熟悉Android應用程序的基本文件結構
-
了解使用開發環境各種工具的基本用法
-
在程序中增加生命周期函數,並輸出log,可以參考課本的示例程序,根據logcat的輸出結果,分析程序的運行流程。注意分析以下幾種情況:
- 程序正常啟動和關閉
- 程序運行中,切換到其他程序
- 程序運行中,有短信和電話呼入
實驗過程
實例程序如下:
package com.example.administrator.myapplication;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
public class MainActivity extends AppCompatActivity {
private static String Tag="LIFECYCLE";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Log.i(Tag,"Create");
}
@Override
protected void onStart() {
super.onStart();
Log.i(Tag,"Start");
}
@Override
protected void onStop() {
super.onStop();
Log.i(Tag,"Stop");
}
@Override
protected void onPause() {
super.onPause();
Log.i(Tag,"Pause");
}
@Override
protected void onResume() {
super.onResume();
Log.i(Tag,"Resume");
}
@Override
protected void onDestroy() {
super.onDestroy();
Log.i(Tag,"Destroy");
}
@Override
protected void onRestart() {
super.onRestart();
Log.i(Tag,"Restart");
}
}
1. 程序正常啟動與關閉
1.1 程序啟動:

1.2 程序正常關閉:

1.3 日志文件:
log1
12-31 19:27:49.400 20642-20642/com.example.administrator.myapplication I/LIFECYCLE: Create
12-31 19:27:49.400 20642-20642/com.example.administrator.myapplication I/LIFECYCLE: Start
12-31 19:27:49.420 20642-20642/com.example.administrator.myapplication I/LIFECYCLE: Resume
log2
12-31 19:34:02.260 25304-25304/com.example.administrator.myapplication I/LIFECYCLE: Create
12-31 19:34:02.270 25304-25304/com.example.administrator.myapplication I/LIFECYCLE: Start
12-31 19:34:02.270 25304-25304/com.example.administrator.myapplication I/LIFECYCLE: Resume
12-31 19:34:14.690 25304-25304/com.example.administrator.myapplication I/LIFECYCLE: Pause
12-31 19:34:16.300 25304-25304/com.example.administrator.myapplication I/LIFECYCLE: Stop
12-31 19:34:16.310 25304-25304/com.example.administrator.myapplication I/LIFECYCLE: Destroy
1.4 分析
程序開始運行時經過了三個狀態,分別為onCreate(), onStart(),onResume()
- onCreate: Activity啟動以后第一個被調用的函數,用來進行初始化。
- onStart(): Activity顯示到屏幕上時會被調用。
- onResume(): Activity可以接受用戶的輸入時,會被調用,處於Activity棧的棧頂。
程序關閉時經過了三個狀態,分別為onPause(),onStop(),onDestroy()
- onPause(): Activity進入暫停狀態時被調用。
- onStop(): Activity不對用戶可見以后,就會被調用,Activity進入停止狀態。
- onDestory: Activity被終止前,或者說進入非活動狀態時,會被調用。
2. 外來電話接入的情況
2.1 程序啟動

2.2 打電話過程中

2.3 掛斷電話

2.4 日志文件
log1
12-31 19:27:49.400 20642-20642/com.example.administrator.myapplication I/LIFECYCLE: Create
12-31 19:27:49.400 20642-20642/com.example.administrator.myapplication I/LIFECYCLE: Start
12-31 19:27:49.420 20642-20642/com.example.administrator.myapplication I/LIFECYCLE: Resume
log2
12-31 19:27:49.400 20642-20642/com.example.administrator.myapplication I/LIFECYCLE: Create
12-31 19:27:49.400 20642-20642/com.example.administrator.myapplication I/LIFECYCLE: Start
12-31 19:27:49.420 20642-20642/com.example.administrator.myapplication I/LIFECYCLE: Resume
12-31 19:29:17.590 20642-20642/com.example.administrator.myapplication I/LIFECYCLE: Pause
12-31 19:29:23.800 20642-20642/com.example.administrator.myapplication I/LIFECYCLE: Stop
log3
12-31 19:27:49.400 20642-20642/com.example.administrator.myapplication I/LIFECYCLE: Create
12-31 19:27:49.400 20642-20642/com.example.administrator.myapplication I/LIFECYCLE: Start
12-31 19:27:49.420 20642-20642/com.example.administrator.myapplication I/LIFECYCLE: Resume
12-31 19:29:17.590 20642-20642/com.example.administrator.myapplication I/LIFECYCLE: Pause
12-31 19:29:23.800 20642-20642/com.example.administrator.myapplication I/LIFECYCLE: Stop
12-31 19:29:59.880 20642-20642/com.example.administrator.myapplication I/LIFECYCLE: Restart
12-31 19:29:59.880 20642-20642/com.example.administrator.myapplication I/LIFECYCLE: Start
12-31 19:29:59.880 20642-20642/com.example.administrator.myapplication I/LIFECYCLE: Resume
2.5 分析
程序開始運行時經過了三個狀態,分別為onCreate(), onStart(),onResume():
- onCreate: Activity啟動以后第一個被調用的函數,用來進行初始化。
- onStart(): Activity顯示到屏幕上時會被調用。
- onResume(): Activity可以接受用戶的輸入時,會被調用,處於Activity棧的棧頂。
程序接入電話時經過了兩個狀態,分別為onPause(),onStop():
- onPause(): onPause(): Activity進入暫停狀態時被調用。
- onStop(): Activity不對用戶可見以后,就會被調用,Activity進入停止狀態。
- 由於電話接入的時候,來電界面會出現,所以導致原有程序進入不可見的狀態,所以先執行onPause在執行onStop()回調函數。
程序在電話掛斷的時候經過了三個狀態,分別為onRestart(),onStart(),onResume():
- onRestart(): Activity從停止狀態進入活動狀態。
- onStart(): Activity顯示到屏幕上時會被調用。
- onResume(): Activity可以接受用戶的輸入時,會被調用,處於Activity棧的棧頂。
- 電話掛斷以后,重新進入原程序界面,所以會經歷重啟,接受用戶輸入的過程。
3. 外來短信接入的情況
3.1 程序啟動

3.2 程序接入短信

3.3 日志文件
log1
12-31 19:38:11.740 28370-28370/com.example.administrator.myapplication I/LIFECYCLE: Create
12-31 19:38:11.750 28370-28370/com.example.administrator.myapplication I/LIFECYCLE: Start
12-31 19:38:11.760 28370-28370/com.example.administrator.myapplication I/LIFECYCLE: Resume
log2
12-31 19:38:11.740 28370-28370/com.example.administrator.myapplication I/LIFECYCLE: Create
12-31 19:38:11.750 28370-28370/com.example.administrator.myapplication I/LIFECYCLE: Start
12-31 19:38:11.760 28370-28370/com.example.administrator.myapplication I/LIFECYCLE: Resume
3.4 分析
程序接入短信的時候,可以發現,日志文件沒有發生任何變化,這也是可以理解的,因為這個過程中短信的進程並沒有變為前台進程,所以原程序沒有被中斷,所以一切正常運行。
4. 程序運行中切換到其他程序(比如說Message)
4.1 程序啟動:

4.2 切換為message

4.3 返回原程序

4.4 日志文件
log1 啟動
12-31 19:42:23.120 28370-28370/com.example.administrator.myapplication I/LIFECYCLE: Restart
12-31 19:42:23.120 28370-28370/com.example.administrator.myapplication I/LIFECYCLE: Start
12-31 19:42:23.120 28370-28370/com.example.administrator.myapplication I/LIFECYCLE: Resume
log2切換
12-31 19:47:03.930 2653-2653/com.example.administrator.myapplication I/LIFECYCLE: Create
12-31 19:47:03.930 2653-2653/com.example.administrator.myapplication I/LIFECYCLE: Start
12-31 19:47:03.930 2653-2653/com.example.administrator.myapplication I/LIFECYCLE: Resume
12-31 19:50:07.910 2653-2653/com.example.administrator.myapplication I/LIFECYCLE: Pause
12-31 19:50:09.710 2653-2653/com.example.administrator.myapplication I/LIFECYCLE: Stop
log3 返回
12-31 19:47:03.930 2653-2653/com.example.administrator.myapplication I/LIFECYCLE: Create
12-31 19:47:03.930 2653-2653/com.example.administrator.myapplication I/LIFECYCLE: Start
12-31 19:47:03.930 2653-2653/com.example.administrator.myapplication I/LIFECYCLE: Resume
12-31 19:50:07.910 2653-2653/com.example.administrator.myapplication I/LIFECYCLE: Pause
12-31 19:50:09.710 2653-2653/com.example.administrator.myapplication I/LIFECYCLE: Stop
12-31 19:51:13.840 2653-2653/com.example.administrator.myapplication I/LIFECYCLE: Restart
12-31 19:51:13.840 2653-2653/com.example.administrator.myapplication I/LIFECYCLE: Start
12-31 19:51:13.850 2653-2653/com.example.administrator.myapplication I/LIFECYCLE: Resume
4.5 分析
從日志中可以看出,切換為另外的程序,但不退出本程序的時候,執行了兩個回調函數:onPause(),onStop():
可見這個過程是原程序進入暫停狀態,然后對用戶不可見,但是並沒有終止。
當從另外切換的程序中返回時,制定了三個回調函數:onRestart(),onStart(),onResume()。
可見這個過程是原程序重啟,從停止狀態變為活動狀態前調用了onRestart(),然后將Activity顯示在屏幕上(onStart),然后Activity可以接受用戶的輸入(onResume)。
