• 【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)。

  • 相关阅读:
    LINQ用于数据库访问的基本方法示例
    设计模式代码示例
    [文档].Altera PLL(锁相环)宏用户指导
    [文档]. Xilinx 编写有效的Testbenches
    [笔记].怎样正确插拔FPGA开发板的JTAG仿真器,如USBBlaster等?
    [连载计划][大家一起学FPGA/SOPC]
    [文档].Altera – SOPC Builder组件开发攻略
    [原创].图解一招搞定UCWEB@Nokia S60v5无法在博客园手机版发闪存的问题
    [文档].Altera – SOPC Builder存储子系统开发攻略
    [笔记].开发SOPC Buider中的自定义IP所必备资料
  • 原文地址:https://www.cnblogs.com/pprp/p/9874615.html
Copyright © 2020-2023  润新知