`
zhangziyangup
  • 浏览: 1073031 次
文章分类
社区版块
存档分类
最新评论

Android之Activity生命周期详细介绍,新手必必必看

 
阅读更多

Android之Activity生命周期史无前例的详细介绍,新手必必必看

Android的Activity生命周期是一个非常重要的知识点,但是由于Activity的状态众多,而且状态直接的切换类型也十分的众多,导致Activity的方法很多,这就给新手学习并理解Activity造成了一定的难度,如果你能认真读完我这一篇博文,那么我相信你一定能对Activity的理解达到一个崭新的高度,ok,下面是我对Activity的理解。


要想透彻的理解Activity,那么必须了解一个计算机的名词,“堆栈”,因为Activity的状态切换方式十分类似于数据结构中的堆栈。

1、首先介绍什么是堆栈,及其特点。

2、介绍Activity的七个状态方法。

3、结合堆栈,详解Activity状态直接的切换和各个方法的调用。

1)、下面我来介绍一下什么是“堆栈”。

堆栈 可以简单的理解成一个的 “竹筒”,只不过种竹筒是一端封闭另一端开启的,如图所示:

透过这个竹筒我们不难发现,因为堆栈的一端是封闭的,所以要想往里面放东西,必须从一端放,取的时候也只能从一端取,就是这堆栈最重要的特点,“后进先出”。

2)、下面我要介绍的是Activity的七个状态方法。

附官方文档图一张:

然后附我代码一篇:


onCreate(Bundle savedInstanceState)
onStart()
onResume()
onPause()

onStop()

onDestroy()
onRestart()

onCreate(Bundle savedInstanceState)
Activity的初始化,也就是一个全新的Activity开始时,调用该方法
onStart()
Activity的启动,当你能够看到Activity时,启动该方法,
onResume()
当Activity获取用户焦点将要与用户交互时调用此方法,此时activity在activity栈的栈顶,用户输入已经可以传递给它
onPause()
当系统要启动一个其他的activity时调用(其他的activity显示之前),这个方法被用来提交那些持久数据的改变、停止动画、和其他占用CPU资源的东西。由于下一个activity在这个方法返回之前不会resumed,所以实现这个方法时代码执行要尽可能快。
如果activity重新回到前景时将调用onResume(), 如果对用户彻底不可见则会调用onStop()。
onStop()
当另外一个activity恢复并遮盖住此activity,导致其对用户不再可见时调用。一个新activity启动、其它activity被切换至前景、当前activity被销毁时都会发生这种场景。
当activity重新回到前景与用户交互时调用onRestart(),如果activity将退出则调用onDestory()。
onDestroy()
在你的activity被销毁前所调用的最后一个方法,当进程终止时会出现这种情况
onRestart()
当activity从停止状态重新启动时调用。其后调用onResume()。

3)、结合堆栈,详细介绍Activity的生命周期和状态切换;

下面附上我三个Activity的代码,嘎嘎,


先启动第一个Activity,看一下效果

我们到看地第一个Activity的启动,调用了三个方法,分别是,onCreate(),onStart(),onResume(),

他们分别表示初始化Activity,显示Activity,获取用户焦点,可以进行操作。

堆栈图:

现在,我们有三种操作方式,分别是:

一,点击后退键;

二,点击home键;

三,启动第二个Activity;

我给大家一一分析这三种情况:

第一种情况,后退键,将会把最顶层的Activity一从堆栈中移除,的直接销毁

启动到退出,一共执行了6个方法,这就是Activity的生命周期,最简单,最正常的,没有任何打断的生命周期,但是就像人一样,难免会生个病,出个车祸什么的,所以,下面介绍第二种和第三种;

上图是我点击了home键之后的执行结果,我们看到又执行了两个方法,分别是onPause和onStop,但是并没有onDestroy,说明Activity并没有被杀掉;而是留在了堆栈之中,处于一种不可见的状态,如果这时候我们又启动这个Activity,会发生什么情况,接下来看图

现在我们看到它又执行了三个方法,分别是onRestart,onStart,onResume,

分别是回到启动,启动,重新获取用户的焦点,从这里我们不难看出,后退键杀死了处于堆栈最上方的Activity,而home键并没有杀死Activity,而是将其处于一种不可见的状态,可以随时恢复;

下面介绍第三种情况,比较复杂;

当我们点击按钮启动第二个Activity时,会发生什么情况,看图:

这次一共调用了5个方法,我来一一说明:

首先是onPause,它将第一个Activity暂停,然后创建第二个Activity,启动它,获取用户焦点,这个时候第一个Activity将处于不可见状态,所以调用其onStop方法,堆栈:

接下来分为两种情况;一种是点击后退键,一种是点击home键

先看点击后退键的情况:

后退,也就是启动上一个Activity,这时先将当前的Activity暂停,onPause,然后启动上一个Activity,启动直到获取用户焦点,就把第二个Activity销毁;

如果点击home键,参考前面的情况;

下面介绍什么时候调用Activity可见,但是失去用户焦点后,再次获取用户焦点的情况,也就是调用onPause,再调用onResume

这种情况是第三个Activity启动,但是样式是对话框,并没有将第二个Activity完全遮挡,所以第二个Activity只调用了onPause,这时候后退

时间关系,未完待续.......

分享到:
评论

相关推荐

    Android之Activity生命周期

    Android之Activity生命周期,适合新手学习,全面而详细的介绍了Activity的生命周期。

    android开发资料大全

    两分钟彻底让你明白Android Activity生命周期(图文)! Android 图形系统剖析 Android 立体效果图片 NDK动态库的调用 Android 姿态传感器 Android 很酷的图像旋转 Android 添加音频 在Android中实现多线程断点下载 ...

    Android基础知识详解

    介绍Android基础知识,包括Android的系统架构、Webkit浏览器引擎简介、Dalvik虚拟机简介、Activity生命周期、Android控件的继承关系、界面布局、Android对话框、Android菜单等,适合学习Android的新手。

    Android实验指导书

    这是一个给Android新手入门使用的实验指导书,里面涉及到了很多东西,包括activity生命周期和常用的入门编程知识和示例代码

    《Google Android 揭秘》(美) W.Frank Ableson 著

    在介绍Android编程的时候,各主题都使用了独立的示例来演示,这些示例也都可单独作为想在Android编程中大展拳脚的编程新手或资深开发者的参考。 本书适合Android开发人员和技术爱好者阅读。如果能从头到尾读完本书...

    android 记事本demo(listview与SQLite)

    android记事本的demo在网上一搜一大堆,但是大神写的demo往往功能太多导致新手难以着手,很难啃得动;而一些新手写的demo又往往是东拼西凑...3、activity生命周期 4、intent、bundle传递参数 5、AlertDialog的基本使用

    Android高级编程--源代码

    3.4 Android应用程序生命周期 48 3.5 理解应用程序的优先级和进程状态 49 3.6 分离资源 50 3.6.1 创建资源 50 3.6.2 使用资源 57 3.6.3 To-Do List资源示例 60 3.6.4 为不同的语言和硬件创建资源 61 3.6.5 ...

    c_java_android_

    Android基础知识详解PDF电子书,内容涉及Android的系统架构、Webkit浏览器引擎简介、Dalvik虚拟机简介、Activity生命周期、Android控件的继承关系、界面布局、Android对话框、Android菜单,显示和编辑文本的控件、...

    Android项目源码带bug记事本可以学习基本的listview和SQLite知识.zip

    注意:本项目是基于android studio开发的,eclipse可能无法直接使用。 本项目是一个简单的基于安卓的记事本项目源码,添加或删除数据的...3、activity生命周期 4、intent、bundle传递参数 5、AlertDialog的基本使用

    Volley框架的使用

    Volley框架的使用,包括网络请求方式的使用,图片加载和图片缓存,Volley与Activity生命周期联动,非常适合新手学习。

    Android项目源码带bug记事本可以学习基本的listview和SQLite知识

    注意:本项目是基于android studio开发的,eclipse可能无法直接使用。 本项目是一个简单的基于安卓的记事本项目源码,添加或删除数据的时候会...3、activity生命周期 4、intent、bundle传递参数 5、AlertDialog的

    B4A安装文件(附教程).7z

    第9章Process和Activity的生命周期.pdf 第10章变量与对象.pdf 第14-15章(14章B4A语言15章画图).doc 第14章节Beginners Guide(B4A语法).doc 第15 图形图像.pdf B4A.exe b4a_bridge.apk installer_r24.4.1-windows....

    listview与SQLite结合实现记事本功能

    android记事本的demo在网上一搜一大堆,但是大神写的demo往往功能太多导致新手难以着手,很难啃得动;而一些新手写的demo又往往是东拼西凑,代码很多都是copy的别人的,直接放在...3、activity生命周期 4、intent、bun

    Meizi:每天更新一张精选妹纸图片,所以叫每日一妹纸(一脸绅士(๑•̀ㅂ•́) ✧)

    刚开始学习Android的时候,主要就是学习了一些Activity的生命周期,各种View和Layout的使用,SQLite等零散的知识点,这些东西市面上任何一本Android的入门书籍都会覆盖,但是学习完这些之后就有些迷茫了,不知道下...

Global site tag (gtag.js) - Google Analytics