(Android学习系列)二,窗口(Activity)的生命周期
在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)的生命周期的更多相关文章
- Android SDK上手指南:Activity与生命周期
Android SDK上手指南:Activity与生命周期 2013-12-26 15:26 核子可乐译 51CTO 字号:T | T Activity生命周期并不仅仅在用户运行应用程序之后才开始生效 ...
- Android开发艺术1之Activity的生命周期
作为<Android开发艺术探索>这本书的第一篇博客,我就多说几句.本系列博客旨在对书中相关内容进行解读,简化,提供一个入门到提高的流程.不敢说书评,也不能说教程,只希望对有些人有帮助就好 ...
- Android 横屏切换竖屏Activity的生命周期(转)
曾经遇到过一个面试题,让你写出横屏切换竖屏Activity的生命周期.现在给大家分析一下他切换时具体的生命周期是怎么样的: 1.新建一个Activity,并把各个生命周期打印出来 2.运行Acti ...
- android学习笔记二、Activity深入学习
一.创建和使用: 1.Activity是android的四大组件之一,需要继承Activity并在清单文件中进行声明才能使用.没有声明则报错. 2.启动Activity是通过Intent,有两种方式: ...
- Android(java)学习笔记170:Activity的生命周期
1.首先来一张生命周期的总图: onCreate():创建Acitivity界面 onStart():让上面创建的界面可见 onResume():让上面创建的界面 ...
- Android学习笔记二:activity的理解
转载请注明原文地址:http://www.cnblogs.com/ygj0930/p/7513290.html 一:activity定义了app的页面 一个app有很多个页面组成,一个页面其实就是一个 ...
- Android(java)学习笔记113:Activity的生命周期
1.首先来一张生命周期的总图: onCreate():创建Acitivity界面 onStart():让上面创建的界面可见 onResume():让上面创建的界面 ...
- Android学习系列(二)布局管理器之线性布局的3种实现方式
转载请注明出处:http://blog.csdn.net/lhy_ycu/article/details/39643669 LinearLayout是Android控件中的线性布局控件,它包括的子控件 ...
- Android学习总结(一)——Activity的基本概念与Activity的生命周期
一.Activity的基本概念 Activity是Android的四大组件之一,它是一种可以包含用户界面的组件,主要用于和用户进行交互,比如打电话,照相,发送邮件,或者显示一个地图!Activity用 ...
随机推荐
- Leetcode237:Delete Node in a Linked List
Write a function to delete a node (except the tail) in a singly linked list, given only access to th ...
- 编译安装-Percona 5.6
CentOS 6.4编译安装Percona 5.6.16 Percona 下载地址:http://www.percona.com 一.卸载原有MySQL检查是否安装有MySQL Server: rpm ...
- UVa 297 - Quadtrees
题目:利用四叉树处理图片,给你两张黑白图片的四叉树,问两张图片叠加后黑色的面积. 分析:搜索.数据结构.把图片分成1024块1*1的小正方形,建立一位数组记录对应小正方形的颜色. 利用递归根据字符串, ...
- ssh+dwr 的使用源码案例
加入dwr.jar包 ======jsp=============== <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitiona ...
- SSH下载的方法
----------------------------------下作下载方法一----------------------------------------------------------- ...
- c++ 中文字符串处理方法
转自:http://hi.baidu.com/hehehehello/item/dcc44a4a6afc690e6dc2f08b C++处理中文的问题困扰我很久了.之前一旦遇到中文基本就投诸java怀 ...
- python flask model 序列化
class DictSerializable(object): def as_dict(self,*args): result = OrderedDict() ...
- codeforces Round #258(div2) D解题报告
D. Count Good Substrings time limit per test 2 seconds memory limit per test 256 megabytes input sta ...
- android复制数据库到SD卡(网上搜集,未经验证)
android中使用sqlite.复制assets下的数据库到SD卡.支持大于1M的文件 如果使用SD卡,需要在AndroidManifest.xml中设置权限 <uses-permission ...
- wordpress文章ID不连续显示问题的完美解决
在最新版的 wordpress 系统中,依然存在着文章ID不连续显示的问题,也就是我们还没有上传多少文章,在数据库里的ID号已经很大了,也就是说如果我们的博客使用的是固定链接,那么在前台显示的ID相差 ...