activity的生命周期这张图是最经典的了,下面我就说一下 这张图的脉络:

  第一条线我们这么走

onCreate→onStart→onResume→onPause→onStop→onDestroy

这条线路是这个activity走的最正常的一条路,说的就是一个activity的建立到退出的全过程。

  接下来这个图的几个分支:

onCreate→onStart→onResume→onPause→onStop→onRestart→onStart...

这条路是一个循环,我具体说下这个是遇到了什么情况才产生的现象,这个是当你开启一个activity时,这时通过点击该activity里的按钮或是其他事件启动了另一个activity,这时我们就假设之前的activity是甲,现在正启动的activity是乙,乙不可能一下子就能启动起来,他需要整合一些资源,就在这个时候,甲调用了onPause的方法,是自己停了下来,这个很可能是怕用户在这个期间再触发其他事件导致会产生一些问题,所以甲停了下来,然后乙准备好了,调用onCreate方法,接下来调用onStart方法,然后是onResume方法,等这一切都完事了,甲才调用onStop方法,接下来如果乙运行完毕,按了返回按钮,这个时候乙就会调用onPause方法,然后甲可以恢复了,甲调用onRestart方法,然后紧接着是onStart方法,甲调完之后,乙调用onStop方法,接下来是乙的onDestroy方法,这个周期就结束了,这个完事了之后不知道你有没有发现,一旦是遇到什么情况,当前的activity首先要做的就是onPause方法,接下来就是等待,等待对方初始化完毕,然后就继续接下来的内容,就有点像一个人再干一件事情,正干着呢,他的朋友突然来了,说你歇会吧,然后他就先停下,但只是放下了手头上的工作,但并没有离开,当朋友把准备工作做完之后,他就下去换上他的朋友,这对所有的窗体都好用吗,并不是,这里要纠正一点,Dialog这个特殊的类型,他与activity没有什么关系,他更像是一个View的组件,如果他出现挡住了一个activity,那这个activity将不理他,什么也不处理,该干啥继续干啥,所以有些人说onPause方法是用来使activity失去焦点的这句话并不完全准确,因为当dialog出现,activity同样会失去焦点,但是他并没有回调onPause函数。

  下面这条路:

onCreate→onStart→onResume→onPause→onResume...

这依旧是一条循环,这个和前面说的那个dialog遇到的情况有些像,只不过这次的不是普通的弹出dialog挡住的界面,而是一个基于activity的主题对话框,实际上对话框大致来说应该分两种,一个是弹出对话框,就是刚刚说的那个,现在要说的刚好是另一个,是主题对话框,主题对话框是基于activity的,所以,当一个activity甲正在运行的时候,通过某些事件产生了一个主题对话框,这个时候,activity会立刻调用onPause,接下来,这个对话框出现了,然而后边的activity并不会调用onStop,因为主题对话框虽然基于activity,但是它并不能占据整个屏幕,所以后边的activity还是有露出来的一部分的,所以activity值调用onPause,当按返回键的时候,那个主题对话框没了,然后activity会调用到onResume函数,回到之前的状态。

  下面:

onCreate→onStart→onResume→onPause→onStop→onCreate...

  同样也可能是

onCreate→onStart→onResume→onPause→onStop→onDestroy→onCreate...

这两种情况是差不多的,可以打个比方,当一个activity处于onResume的时候,这时按了home键,我们知道,他接下来会调用onPause,onStop方法,这时我们将进程杀掉,再通过home回来,会发现该activity又重新调用了onCreate方法,同理,当一个activity处于onResume的时候,这时用返回键一次一次的退出,最后将程序完全退出,这个时候activity就会调用到onDestroy方法了,这个时候如果突然将进程杀死,然后再回来,会发现activity还是从onCreate调起的。

  好了,以上是我对activity的一路走来的理解,网上的介绍很多,这是我个人的理解,希望大家多多给予意见如果哪里有争议,麻烦提出来。

Activity的生命之路的更多相关文章

  1. Android开发学习之路--Activity之生命周期

    其实这篇文章应该要在介绍Activity的时候写的,不过那个时候还不怎么熟悉Activity,还是在这里详细介绍下好了.还是参考下官方文档的图吧: 从上面的流程,我们可以看出首先就是打开APP,开始执 ...

  2. Android开发艺术探索笔记——第一章:Activity的生命周期和启动模式

    Android开发艺术探索笔记--第一章:Activity的生命周期和启动模式 怀着无比崇敬的心情翻开了这本书,路漫漫其修远兮,程序人生,为自己加油! 一.序 作为这本书的第一章,主席还是把Activ ...

  3. Android开发之Activity的生命周期以及加载模式

    本篇博客就来好好的搞一下Activity的生命周期,如果搞过iOS的小伙伴的话,Activity的生命周期和iOS中ViewController的生命周期非常类似.生命周期,并不难理解.一个人的生命周 ...

  4. Activity的生命周期

    Activity的生命周期 以往我们实现页面间的跳转都是实例化Intent类的对象,但是页面在我们眼前的出现与消失没有我们所看到的那么简单,它有一个复杂的生命周期,一个页面的出现,被覆盖,再次出现,被 ...

  5. 浅谈Android中Activity的生命周期

    引言 我想对于Android开发人员来说,Activity是再熟悉不过了,今天我们就来探讨下Activity的生命周期.熟悉的掌握Activity对于开发健壮的Android应用程序来说至关重要.下面 ...

  6. 关于activity的生命周期的随笔

    在activity的生命周期中,我总是容易混淆,onstart和on resume ,on pause和onstop 原来这个都是一对的. onstart 对应 onstop ,意义在于使页面显示出来 ...

  7. 每天一点Android干货-Activity的生命周期

    Activity Activity是这样一个程序组件,它为用户提供一个用于任务交互的画面. 一个应用程序通常由多个activity组成,它们彼此保持弱的绑定状态.典型的,当一个activity在一个应 ...

  8. Android中Activity的生命周期

    简介: 这个基本是必问的问题了,说一下你对Activity生命周期的理解,呵呵… onCreate, onStart, onResume, onPause, onStop, onDestroy, on ...

  9. Android Activity的生命周期简单总结

    Android Activity的生命周期简单总结 这里的内容参考官方的文档,这篇文章的目的不是去总结Activity是如何启动,如何创造,以及暂停和销毁的,而是从实际开发中分析在Activity各个 ...

随机推荐

  1. equal与== 个人笔记

    首先看看下面的图,看清楚了图咱们要说的知识点也就说说清楚了一半 int a=10; String b="ss"; String c=new String("kkk&quo ...

  2. jQuery的ajax使用

    一:jQuery.ajax语法基础 jQuery.ajax([options]) 概述:通过 HTTP 请求加载远程数据. jQuery 底层 AJAX 实现.简单易用的高层实现见 $.get, $. ...

  3. Linux网络设置(第二版) --互联网寻址过程

    Linux网络设置 --互联网寻址过程 1.TCP/IP与OSI参考模型比较 TCP/IP OSI 物理层 网卡 数据链路层 * MAC地址 网络层 IP,ICMP,ARP协议 传输层 TCP,UDP ...

  4. C语言实现快速翻转数组的顺序

    #include <stdio.h> void Reverse(int *p , int size) { int i , tmp; for(i = 0 ; i < size/2 ; ...

  5. C语言之linux内核可变参实现printf,sprintf

    昨天,我发表了一篇用可变参实现的fprintf函数,其实说实话还不完全是可变参实现的,因为用到了FILE * 这样的指针,需要包含stdio.h这个头文件才能实现这个函数,今天我们就来看看,如何抛弃s ...

  6. objective-c中的method swizz实现"猴打补丁"

    ruby中的猴打补丁很好实现,下面给出例子: class String alias :org_upcase :upcase def upcase puts("trace me if you ...

  7. How to download the installation package by ZOL Downer

    How to download the installation package by ZOL Downer Ma Genfeng (Guangdong Unitoll Services incorp ...

  8. 面试之路(18)-java的函数参数传递类型之值传递还是引用传递

    关于这个问题争论了很久,最近也是偶然发现这个问题 经典名言: O'Reilly's Java in a Nutshell by David Flanagan (see Resources) puts ...

  9. javascript原始值和对象引用

    一句话来说:原始值是不可变的,而对象引用是可变的. js中的原始值(undefined.null.布尔值.数字和字符串)与对象(包括数组和函数)有着本质的区别.原始值是不可更改的,任何方法都无法更改一 ...

  10. 简单了解AJAX

    // ajax的俩个版本: var xmlhttp; if(window.xmlHttpRequest){ xmlhttp = new xmlHttpRequest(); }else{ xmlhttp ...