【Android實驗】第一個Android程序與Activity生命周期


第一個Android程序和Activity生命周期

實驗目的

生成運行第一個Android程序,熟悉了解Android手機開發平台的基本構成和使用方法,熟悉Android應用程序項目的基本文件目錄結構,了解開發環境提供的各種工具的基本用法。

在Activity中重載下9種事件函數,在調用不同函數時使用LogCat在Eclipse的控制台中輸出調用日志。掌握Activity在啟動、停止和銷毀等不同階段,9種重載函數的調用順序,並掌握Android調試工具LogCat的使用方法

實驗要求

  1. 用工程向導生成第一個Android程序,並在模擬器上運行
    注意在新建應用的選擇SDK版本時選API 18

  2. 熟悉Android應用程序的基本文件結構

  3. 了解使用開發環境各種工具的基本用法

  4. 在程序中增加生命周期函數,並輸出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)。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM