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

【Android实验】第一个Android程序与Activity生命周期的更多相关文章

  1. Android学习路线(十二)Activity生命周期——启动一个Activity

    DEMO下载地址:http://download.csdn.net/detail/sweetvvck/7728735 不像其他的编程模式那样应用是通过main()函数启动的.Android系统通过调用 ...

  2. Android 面试之横竖屏切换的Activity生命周期

    public class EngineerJspActivity extends Activity { private static String Tag = "EngineerJspAct ...

  3. Android学习路线(十四)Activity生命周期——停止和重新启动(Stopping and Restarting)一个Activity

    正确地停止和重新启动你的activity在activity的生命周期中是一个非常重要的过程.这样可以确保你的用户感觉到你的应用一直都活着而且没有丢失进度.你的activity的停止和重新启动时有几个重 ...

  4. 图解:Activity生命周期

    当用户需要对手机通过屏幕进行交互时,比如打一个电话,拍张照片,发送一个邮件,或者查看地图.开发者就需要实现一个活动(Activity).每个活动都将作为一个提供用户使用接口的窗口.它可以填满整个屏幕, ...

  5. Android-管理Activity生命周期 -暂停和恢复一个Activity

    在正常的使用app时,前台的activity有时候会被可见的组件阻塞导致activity暂停.比如,当打开一个半透明的activity(就像打开了一个对话框),之前的activity就会暂停.只要ac ...

  6. Android-管理Activity生命周期 -开始一个Activity

    很多程序都是从main()方法开始启动的,和其他程序不同,android是在activity生命周期的特定状态的特定回调方法中初始化代码的.activity启动和销毁的时候都用很多回调方法. 这里将要 ...

  7. Android Studio新建一个HelloWorld 程序(App)

    Android Studio新建一个HelloWorld程序(App) 新建 或者直接启动程序(注:如果已有程序,此方法会直接打开最近一次关闭从程序) 更改App名 选择App运行平台 选择模板 更改 ...

  8. [转]: 两分钟彻底让你明白Android Activity生命周期(图文)!

    转自:http://blog.csdn.net/android_tutor/article/details/5772285 大家好,今天给大家详解一下Android中Activity的生命周期,我在前 ...

  9. android Activity生命周期(设备旋转、数据恢复等)与启动模式

    1.Activity生命周期     接下来将介绍 Android Activity(四大组件之一) 的生命周期, 包含运行.暂停和停止三种状态,onCreate.onStart.onResume.o ...

随机推荐

  1. sql server 基本问题解决思路

    1.数据库故障排查步骤,如何处理紧急数据库问题;首先根据报错信息找到故障原因.然后实施对应的解决方案.2.SQL调优步骤,如何来判断SQL语句存在问题,怎么定位问题,如何解决这些问题:可以建立一个Pe ...

  2. 前端 HTML标签介绍

    那什么是HTML标签呢? 1. 在HTML中规定标签使用英文的的尖括号即"<"和">"包起来,如`<html>`.`<p>` ...

  3. 003-Nginx 设置Header 获取真实IP

    1.X-Forwarded-For的定义: X-Forwarded-For:简称XFF头,它代表客户端,也就是HTTP的请求端真实的IP,只有在通过了HTTP 代理或者负载均衡服务器时才会添加该项.它 ...

  4. Flask中'endpoint'(端点)的理解

    翻译整理自Stack Overflow:http://stackoverflow.com/questions/19261833/what-is-an-endpoint-in-flask 原文中用到了m ...

  5. HTML <input> 标签的 name 属性

    定义和用法 name 属性规定 input 元素的名称. name 属性用于对提交到服务器后的表单数据进行标识,或者在客户端通过 JavaScript 引用表单数据. 注释:只有设置了 name 属性 ...

  6. selenium webdriver窗口切换(上)

    selenium webdriver窗口切换,有时候在做自动化的时候需要打开很多很多的页面, 当在操作不同的页面的时候需要切换窗口,下面是如何切换到前后页面窗口的操作: package test201 ...

  7. mysql的Navicat查看数据库的ER图

    1.mysql数据库表间的关系图可以通过navicat查看.

  8. nginx之全局设置,location,虚拟主机,日志管理

    nginx之全局设置,location,虚拟主机,日志管理 worker_processes 1;//子进程,cpu数*核数 ****************全局设置************** ** ...

  9. FastDFS+nginx+keepalived集群搭建

    安装环境 nginx-1.6.2 libfastcommon-master.zip FastDFS_v5.05.tar.gz(http://sourceforge.net/projects/fastd ...

  10. Linux基础命令---fold

    fold 按照指定的宽度显示文件. 此命令的适用范围:RedHat.RHEL.Ubuntu.CentOS.SUSE.openSUSE.Fedora. 1.语法       fold [选项]  fil ...