在Activity从创建到销毁的过程中需要在不同的阶段调用7个生命周期的方法这7个生命周期方法定义如下:

protected void onCreate(Bundle savedInstanceState)
protected void onStart()
protected void onResume()
protected void onPause()
protected void onStop()
protected void onRestart()
protected void onDestroy()

上面7个生命周期方法分别在4个阶段按一定的顺序进行调用

1,开始Activity:在这个阶段依次执行3个生命周期方法,分别是onCreate,onStart,onResume

2,Activity失去焦点:如果在Activity获得焦点的情况下进入其他的Activity或者应用程序,当前的Activity会失去焦点,这一阶段会依次执行onPause,onStop方法

3,Activity重新获得焦点:这时会依次执行onRestart,onStart,onResume方法

4,关闭Activity:当Activity被关闭时系统会依次执行3个生命周期方法,分别是onPause,onStop,onDestory

如果这4个阶段执行生命周期方法的过程中不发生状态的改变,系统会按照上面的顺序依次执行4个阶段的生命周期方法,如果在执行过程中改变了状态,系统会按照更复杂的方法调用生命周期方法

如果在执行onStop方法的过程中Activity重新获得焦点,然后又失去了焦点,系统将不会执行onDestory方法,而是按照下面顺序执行生命周期方法

onStop->onRestart->onStart->onResume->onPause->onStop

下图描述了Activity从创建到销毁以及中间状态的改变后调用生命周期方法的过程

从上图所示的Activity生命周期调用方法示意图不难看出,在整个Activity的生命周期中包含两层循环,第一层循环是onPause->onResume->onPause,第二层循环onStop->onRestart->onStart->onResume->onPause->onStop。我们可以将这两层循环看成是整个Activity生命周期中的子生命周期。

第一层循环称为焦点生命周期,第二层循环称为可视生命周期,也就是说,第一层循环再Activity焦点的获得与失去的过程中循环,在这一过程中,Activity始终是可见的,第二层循环是在Activity可见与不可见的过程中循环,在这个过程中伴随着Activity焦点的获得与失去,也就是说,Activity首先会被显示,然后会获得焦点,接着失去焦点,最后由于弹出其他的Activity使当前的Activity变成不可见。

因此,Activity有如下3种生命周期:

  1.整体生命周期:onCreate->....->onDestroy

  2.可视生命周期:onStart->....->onStop

  3.焦点生命周期:onResume->....->onPause

下面代码分别在Activity类中7个生命周期方法中输出日志信息

package com.neil.ad02;

import android.app.Activity;
import android.os.Bundle;
import android.util.Log;

public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        Log.d("onCreate","onCreate Method is executed");
        setContentView(R.layout.activity_main);
    }

    @Override
    protected void onDestroy()
    {
        super.onDestroy();
        Log.d("onDestroy","onDestroy Method is executed");
    }

    @Override
    protected void onPause()
    {
        super.onPause();
        Log.d("onPause","onPause Method is executed");
    }

    @Override
    protected void onRestart()
    {
        super.onRestart();
        Log.d("onRestart","onRestart Method is executed");
    }

    @Override
    protected void onResume()
    {
        super.onResume();
        Log.d("onResume","onResume Method is executed");
    }

    @Override
    protected void onStart()
    {
        super.onStart();
        Log.d("onStart","onStart Method is executed");
    }

    @Override
    protected void onStop()
    {
        super.onStop();
        Log.d("onStop","onStop Method is executed");
    }
}

打开Android Device Monitor观察

图中红框里是重新获得焦点,其他的你们可以一一尝试

(Android学习系列)二,窗口(Activity)的生命周期的更多相关文章

  1. Android SDK上手指南:Activity与生命周期

    Android SDK上手指南:Activity与生命周期 2013-12-26 15:26 核子可乐译 51CTO 字号:T | T Activity生命周期并不仅仅在用户运行应用程序之后才开始生效 ...

  2. Android开发艺术1之Activity的生命周期

    作为<Android开发艺术探索>这本书的第一篇博客,我就多说几句.本系列博客旨在对书中相关内容进行解读,简化,提供一个入门到提高的流程.不敢说书评,也不能说教程,只希望对有些人有帮助就好 ...

  3. Android 横屏切换竖屏Activity的生命周期(转)

    曾经遇到过一个面试题,让你写出横屏切换竖屏Activity的生命周期.现在给大家分析一下他切换时具体的生命周期是怎么样的:  1.新建一个Activity,并把各个生命周期打印出来  2.运行Acti ...

  4. android学习笔记二、Activity深入学习

    一.创建和使用: 1.Activity是android的四大组件之一,需要继承Activity并在清单文件中进行声明才能使用.没有声明则报错. 2.启动Activity是通过Intent,有两种方式: ...

  5. Android(java)学习笔记170:Activity的生命周期

    1.首先来一张生命周期的总图: onCreate():创建Acitivity界面       onStart():让上面创建的界面可见              onResume():让上面创建的界面 ...

  6. Android学习笔记二:activity的理解

    转载请注明原文地址:http://www.cnblogs.com/ygj0930/p/7513290.html 一:activity定义了app的页面 一个app有很多个页面组成,一个页面其实就是一个 ...

  7. Android(java)学习笔记113:Activity的生命周期

    1.首先来一张生命周期的总图: onCreate():创建Acitivity界面       onStart():让上面创建的界面可见              onResume():让上面创建的界面 ...

  8. Android学习系列(二)布局管理器之线性布局的3种实现方式

    转载请注明出处:http://blog.csdn.net/lhy_ycu/article/details/39643669 LinearLayout是Android控件中的线性布局控件,它包括的子控件 ...

  9. Android学习总结(一)——Activity的基本概念与Activity的生命周期

    一.Activity的基本概念 Activity是Android的四大组件之一,它是一种可以包含用户界面的组件,主要用于和用户进行交互,比如打电话,照相,发送邮件,或者显示一个地图!Activity用 ...

随机推荐

  1. 使用WITH AS 的ROW_NUMBER分页

    WITH tempTable AS(     --复杂查询语句) SELECT * FROM (select ROW_NUMBER()  Over( order by xxx) as rowNum, ...

  2. react native 网络get请求方式参数不可为undefined或null

    react native 网络get请求方式参数不可为undefined(为空的话默认变为)或null 错误写法: export function addToCartAction(isRefreshi ...

  3. F5 会话保持

    1.什么是会话保持?在大多数电子商务的应用系统或者需要进行用户身份认证的在线系统中,一个客户与服务器经常经过好几次的交互过程才能完成一笔交易或者是一个请求的完成.由于这几次交互过程是密切相关的,服务器 ...

  4. jquery操作select 的value和text值

    获取select 的text值: $('#testSelect option:selected').text(); 获取select 的value值: $('#testSelect').val(); ...

  5. SQL Server中行列转换

    典型实例 一.行转列 1.建立表格 ifobject_id('tb')isnotnulldroptabletb go createtabletb(姓名varchar(10),课程varchar(10) ...

  6. IIS7下.NET4.0 网站UrlRewriter.dll重写无后缀路径 失效

    解决方法: 1.添加通配符脚本映射,选择:C:\Windows\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll 2.找到和网站相对的连接池,选择 ...

  7. div+css样式表的id,class的常用命名规则

    div+css样式表的id的常用命名规则如下表所示: div+css样式表的id的常用命名规则如下表所示: 页头 header 登录条 loginBar 标志 logo 侧栏 sideBar 广告 B ...

  8. NodeJs使用Mysql模块实现事务处理

    依赖模块: 1. mysql:https://github.com/felixge/node-mysql npm install mysql --save 2. async:https://githu ...

  9. STM32 使用 printf 发送数据配置方法 -- 串口 UART, JTAG SWO, JLINK RTT

    STM32串口通信中使用printf发送数据配置方法(开发环境 Keil RVMDK) http://home.eeworld.com.cn/my/space-uid-338727-blogid-47 ...

  10. uva193 - Graph Coloring

    Graph Coloring You are to write a program that tries to find an optimal coloring for a given graph. ...