第一个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)。