Activity的生命周期及加载模式

当Activity运行时,它的活动状态是由Android以栈的形式管理的,当前活动的Activity位于栈顶。并且Activity可以类似QQ的隐身,下线,上线等等,这就是它的生命周期。

1.Activity的生命周期

Activity的生命周期大致一共分为4种:

  • 活动状态:位于前台,就是你能看的见
  • 暂停状态:其他的Activity位于前台,该Activity依然可见,一般是部分可见,只是不能获得焦点。
  • 停止状态:该Activity不可见,失去焦点。
  • 销毁状态:该Activity结束。或者所在进程被结束的时候。

具体周期的总结,我感觉这篇文章总结的挺好,我就不重复制造轮子了  总结

看完了总结,感觉都记住了,其实什么也没记住,毕竟有点抽象。

下面我以一个示例说明一下怎么应用吧,我们在开发中遇到的状况基本就4种。

  1. 正常启动一个Activity   onCreate()  --->  onStart()  --->  onResume()
  2. Activity部分可见,(包含Dialog的Activity,按poweroff锁屏等)onPause()  ,再回到前台 onResume()
  3. Activity不可见,(自己主动跳转到其他Activity或者来个电话啥的  )onPause() --> onStop()  下一步 如果重新到前台 onRestart() -->  onStart()   -->  onResume() ,如果销毁onDestory()
  4. 可见Activity直接finish 调用   onPause() --> onStop() --->onDestory()

结论,由于系统能直接杀死app进程(比如设置里的强行停止),不经过onStop或onDestory,有些文章说onPause()方法是我们最大程度上保证Activity在销毁之前能够执行到的方法,有人说是onStop()。但是我实验的是onStop(),

2.Activity的加载模式

Activity的加载模式能干什么,负责管理实例化、加载Activity的方式,并且可以控制Activity与Task之间的关系,不了解什么是Task的请看这篇文章http://www.cnblogs.com/ghj1976/archive/2011/04/29/2032412.html

  • standard:标准模式(默认模式)
  • singleTop:Task顶单例模式
  • singleTask:Task内单例模式
  • singleInstance:全局单例模式。

加载模式的配置:在AndroidManifest.xml文件中activity元素的android:launchMode属性:

standard:这种模式用启动Activity,Android总会为目标Activity创建新的实例,这种模式不会创建新的Task。

singleTop:与标准模式基本一样,不同的是,如果目标Activity在栈顶,则Android不会创建新的Activity实例。其他情况和标准模式一样。

singleTask:采用这种模式加载Activity时,每个Task里只允许有一个该Activity的实例,如果要启动的Activity不存在,则创建新的实例,放到栈顶;

如果要启动的Activity已经位于栈顶,则和singleTop一样,不创建新的实例,世界复用该Activity实例;如果要启动的Activity存在于Task内,但是没有在栈顶,则Android会把要启动的Activity实例以上的所有Activity都移出Task,知道目标Activity位于栈顶。

singleInstance:采用这种模式加载时,一个Activity只允许有一个Task,并且一个Task也只有一个Activity实例。

说了这么多,然而并没有太多的卵用,你会说具体到应用中我哪知道我该用哪种加载模式呢,这得看你的需求了,举个例子,你APP的首页,一般情况下是用singleTask加载模式,为什么呢,因为一般情况下,我在首页时,我希望其他的Activity都销毁掉,以免造成后退和其他的问题,当然后台服务除外。所以一般的Activity还是用默认的加载模式,因为我们用完自己主动就销毁掉了。

其他的应用场景大家可以留言交流。

时间: 2024-07-30 03:22:13

Activity的生命周期及加载模式的相关文章

Activity的生命周期与加载模式(一)

Activity是android应用最重要的组成单元之一(另外三个是Service.BroadcaseReceiver.ContentProvider),Activity的功能是向用户呈现不同的操作界面.一个android应用通常有多个activity组成activity栈,当前活动的activity位于栈顶. 当Activity处于Android应用中运行时,同样受系统控制有其自身的生命周期. 下面详细介绍Android的生命周期: ***总结起来大致有4个状态*** 活动状态:当前的Acti

Activity的生命周期与加载模式

前言: 接触Android快两个礼拜了,虽然已开发了一个非常简单的app,但却还没有理清Activity的生命周期,自然对它里面的几种方法的含义没有彻底清楚的认识,今天好好总结一下. 一.Activity的生命周期: (1)运行状态:Activity位于前台,用户可见,可以获得焦点. (2)暂停状态:其他Activity位于前台,该Activity依然可见,只是不能获得焦点. (3)停止状态:该Activity不可见,失去焦点. (4)销毁状态:该Activity结束,或者Activity所在进

iOS UI-视图控制器的生命周期、加载方法和模态视图方法

1 #import "ViewController.h" 2 #import "SecondViewController.h" 3 4 @interface ViewController () 5 6 @end 7 8 @implementation ViewController 9 10 11 // 视图控制器的生命周期 12 // 视图控制器的加载方法 13 // 模态视图方法 14 15 /* 16 // 视图控制器的加载方法 17 - (instancety

IOS中的生命周期及加载过程

这一节,主要讲解UIKit框架下,应用程序的生命周期,UIView的生命周期,异常处理流程及控制器的加载过程. 四大对象关系图 应用程序生命周期 对上面的流程进行说明: 1. 程序启动执行,先进入main函数: int main(int argc, char * argv[]) 2. 执行UIApplicationMain函数: return UIApplicationMain(argc, argv, nil, NSStringFromClass([HKAppDelegate class]));

我的Android进阶之旅------>Android Activity的singleTask加载模式和onActivityResult方法之间的冲突

今天调试一个bug的时候,情景如下: 一个Activity A,需要用startActivityForResult方法开启Activity B.Activity B的launch mode被设置为singleTask,那么在Activity B开启之后的瞬间(未等B返回任何result),Activity A中的onActivityResult方法就会被调用,并且收到一个RESULT_CANCEL的request code. 然后在ActivityB中做了一些逻辑之后,在Activity B通过

[转]Android Activity的加载模式和onActivityResult方法之间的冲突

前言 今天在调试程序时,发现在某一Activity上点击返回键会调用该Activity的onActivityResult()方法.我一开始用log,后来用断点跟踪调试半天,还是百思不得其解.因为之前其他的Activity的LaunchMode都是Normal,没有特殊设定,这个Activity由于需求改成了singleTop.直到我确定没有一个地方是代码主动触发的,我才想到了跟Activity的LaunchMode是否有关. 探索 在Google上搜索android activity onact

Activity四种加载模式(解释的非常好)

在多Activity开发中,有可能是自己应用之间的Activity跳转,或者夹带其他应用的可复用Activity.可能会希望跳转到原来某个Activity实例,而不是产生大量重复的Activity. 这需要为Activity配置特定的加载模式,而不是使用默认的加载模式. 加载模式分类及在哪里配置 Activity有四种加载模式: standard singleTop singleTask singleInstance 设置的位置在AndroidManifest.xml文件中activity元素的

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

Android开发艺术探索--第一章:Activity的生命周期和启动模式 怀着无比崇敬的心情翻开了这本书,路漫漫其修远兮,程序人生,为自己加油! 一.序 作为这本书的第一章,主席还是把Activity搬上来了,也确实,和Activity打交道的次数基本上是最多的,而且他的内容和知识点也是很多的,非常值得我们优先把他掌握,Activity中文翻译过来就是"活动"的意思,但是主席觉得这样翻译有些生硬,直接翻译成"界面"可能更好,的确,Activity主要也是用于UI效

Android四种Activity的加载模式(转)

建议首先阅读下面两篇文章,这样才可以更好的理解Activity的加载模式: Android的进程,线程模型: http://www.cnblogs.com/ghj1976/archive/2011/04/28/2031586.html 其中对“Android的单线程模型”的描述,明白Activity的一些注意事项. Android Application Task Activities的关系  http://www.cnblogs.com/ghj1976/archive/2011/04/29/2