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

Activity是android应用最重要的组成单元之一(另外三个是Service、BroadcaseReceiver、ContentProvider),Activity的功能是向用户呈现不同的操作界面。一个android应用通常有多个activity组成activity栈,当前活动的activity位于栈顶。

当Activity处于Android应用中运行时,同样受系统控制有其自身的生命周期。

下面详细介绍Android的生命周期:

***总结起来大致有4个状态***

  • 活动状态:当前的Activity位于前台,可以看见,可以获得焦点。
  • 暂停状态:其他Activity位于前台,该Activity依然可见,只是不能获得焦点。
  • 停止状态:该Activity不可见,失去焦点。
  • 销毁状态:该Activity结束,或Activity所在的Dalvik进程被结束

在Activity的生命周期中有7个方法,3个阶段。

  • onCreate()    该方法只会被调用一次
  • onStart()      启动Activity时被回调
  • onRestart()    重新启动Activity
  • onResume()   恢复Activity,onStart()方法后一定会回调onResume()
  • onPause()     暂停Activity
  • onStop()      停止
  • onDestroy()    销毁Activity,该方法只会被回调一次

3个状态为

开始Activity状态:onCreate()àonStart()àonResume()

重新获取焦点状态:onRestartàonStart()àonResume()

关闭Activity状态:onPause()àonStop()àonDestroy()

 

 

下面介绍Activity的4种加载模式

ü  在说加载模式之前先介绍一下Activity的配置

在应用中所有应用组件( Activity、Service、ContentProvider、BroadcaseReceiver)都必须进行显式配置。

配置Activity通常指定下面几个属性

  • name : 该Activity实现类的类名
  • icon :  指定图标
  • label:指定标签
  • exported:指定该activity是否允许被其他应用调用。
  • launchMode指定该activity的加载模式。

除此之外,一般还需要指定一个或多个<intent-filter…/>元素,用于响应该Activity可响应的Intent

下面说一下launchMode属性: 加载模式,该属性有4个属性值

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

那么,Activity的加载模式到底是什么,干什么用的呢。在上面提过一下,Android中对Activity的管理是通过栈来管理的,也就是Task,当我们启动一个应用时,Android就会为之创建一个Task,然后启动这个应用的入口Activity,intent中配置为MAIN的。

1 <intent-filter>
2
3                 <action android:name="android.intent.action.MAIN" />
4
5                 <category android:name="android.intent.category.LAUNCHER" />
6
7  </intent-filter>

在android中并没为Task提供API,我们无法真正去访问Task,只能用getTaskId()方法来获取Activity所在Task的Id,然后,Task以栈的形式管理Activity,先启动的放在栈底,后启动的Activity放在栈顶。

那么,Activity的加载模式,就负责管理实例化、加载Activity的方法,并可以控制Activity与Task之间的加载关系。

下面详细介绍4种加载模式:

1、 standard模式

当用standard模式启动目标Activity时,每启动一次,android就会创建一个新的Activity实例,并将该Activity添加到当前Task栈中-----这种模式不会启动新的Task,新Activity将被添加到原有的Task中。

第3次启动

该Activity实例3

第2次启动


该Activity实例2

第1次启动


该Activity实例1

2、 singleTop模式

这种模式跟standard模式基本相似,只是有一点不同:当将要被启动的目标Activity已经位于栈顶时,系统将不会重新创建Activity实例,而是直接用已经位于栈顶的原有Activity实例。 如果目标Activity没有位于栈顶,此时系统会重新创建目标Activity的实例,并加载到Task的栈顶。

3、 singleTask模式

采用singleTask模式的Activity,在同一个Task中只能有一个该Activity实例,分为如下3中情况:

  • 如果要启动的Activity实例不存在,则系统会创建该Activity实例,并加载到Task栈顶
  • 如果要启动的Activity存在,且已经位于栈顶,则不需要实例化,此时与singleTop模式相同。
  • 如果要启动的Activity存在,但,没有位于栈顶,此时系统将会把位于该Activity上面的所有其他Activity移除栈,从而使将要启动的Activity位于栈顶。

4、 singleInstance模式

这种模式又叫全局加载模式,意思是:无论将要加载的目标Activity位于哪个Task中,系统只会创建一个目标Activity实例,并且使用一个全新的Task栈来加载该Activity实例。

可以分为下面两种情况:

  • 如果目标Activity不存在,系统会先创建一个全新的Task,然后实例化目标Activity,放入栈顶。
  • 如果目标Activity已经存在,无论它在哪个应用程序(当然,那个应用程序的exported属性要设置为True,表面允许其他应用程序来启动该Activity),哪个Task栈中,系统都会把该Activity所在的Task转到前台,从而使用该Activity显示出来。

补充一点就是说,使用singleInstance加载模式时,系统创建一个全新的Task,然后Task栈中只包含该Activity。

时间: 2024-10-06 08:19:08

Activity的生命周期与加载模式(一)的相关文章

Activity的生命周期及加载模式

当Activity运行时,它的活动状态是由Android以栈的形式管理的,当前活动的Activity位于栈顶.并且Activity可以类似QQ的隐身,下线,上线等等,这就是它的生命周期. 1.Activity的生命周期 Activity的生命周期大致一共分为4种: 活动状态:位于前台,就是你能看的见 暂停状态:其他的Activity位于前台,该Activity依然可见,一般是部分可见,只是不能获得焦点. 停止状态:该Activity不可见,失去焦点. 销毁状态:该Activity结束.或者所在进

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进阶之旅------&gt;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