第一个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. Xstream解析XML

    <oschina> <catalog>1</catalog> <newsCount>0</newsCount> <pagesize&g ...

  2. Java虚拟机详解02----JVM内存结构

    主要内容如下: JVM启动流程 JVM基本结构 内存模型 编译和解释运行的概念 一.JVM启动流程: JVM启动时,是由java命令/javaw命令来启动的. 二.JVM基本结构: JVM基本结构图: ...

  3. 【HDOJ】5128

    暴力+计算几何. /* 5128 */ #include <iostream> #include <algorithm> #include <cstdio> #in ...

  4. [PWA] 6. Hijacking response

    For example, if the url is not match to any API endpoint, we want to return 404 error message. So fi ...

  5. 判断用户是pc访问还是手机访问

    前天因为手机页面中点击无法链接53客服,就研究了下怎样通过js判断,用户是拿手机(ipad)访问,还是pc端访问, 如果是手机访问的话只需把链接通过attr修改a的链接地址~ <a class= ...

  6. 微信小程序入门——怎么建多个项目?(导入官方Demo程序进行学习)

    昨天1月9日微信小程序发布,顿时被朋友圈刷爆,今天看了一下官方文档,自己开始一步一步搭建环境体验小程序开发. 常见问题: 1.微信小程序开发是否需要重新创建开发者账号? 需要,即使之前申请了微信服务号 ...

  7. 使用Maven快速创建一个SpringMVC工程步骤

    第一步:创建maven工程,加入SpringMVC的maven依赖: <dependency> <groupId>org.springframework</groupId ...

  8. php留言板的实现

    留言板功能的实现,主要就是通过编程语言对数据库进行操作,简单说也就是插入和查询的实现.不管是什么语言进行实现,道理都是一样的. 应学习需要,这里用php世界上最美的语言来进行实现. 主要步骤为: 连接 ...

  9. APM(pixhawk)飞控疑难杂症解决方法汇总(持续更新)

    本文转自下面博主 https://blog.csdn.net/junzixing/article/details/79310159 APM/Pixhawk常用链接汇总(持续更新) https://bl ...

  10. SQLSERVER事务日志已满 the transaction log for database &#39;xx&#39; is full

    解决办法:清除日志 USE [master] GO ALTER DATABASE DNName SET RECOVERY SIMPLE WITH NO_WAIT GO ALTER DATABASE D ...