Android学习之——Activity的生命周期与加载模式

Activity的生命周期:

在Activity在Android应用中运行时,它的活动状态由Android以Activity栈的形式管理。当前Activity位于栈顶,每个Activity都可能从活动状态转为非活动状态,也可能由非活动状态转为活动状态。

Activity的状态大概有4个:
  • 活动状态:当前Activity位于前台,可见,可以获取焦点。
  • 暂停状态:其他Activity位于前台,该Activity可见,但不能获取焦点。
  • 停止状态:Activity不可见,失去焦点。
  • 销毁状态:Activity结束,或者Activity所在的Dalvik进程结束。
下面是官方Activity生命期结构图:


从图中可以看到被回调的方法有:
  • onCreate(Bundle savedStatus):创建Activity时被回调。只调用一次。
  • onStart():启动Activity时被回调。
  • onRestart():重新启动Activity时被回调。
  • onResume():恢复Activity时被回调,onStart()方法回调后一定会回调该方法。
  • onPause():暂停Activity时被回调。
  • onStop():停止Activity时被回调。
  • onDestory():销毁Activity时被回调,之调用一次。
开发的时候,可以选择性地去覆写上面的方法其中最常见的覆写方法是onCreate(Bundle savedStatus)——用于对Activity的初始化。
onPause()方法和onResume()方法在游戏开发中很常见。

当然,要真正了解的话,要自己覆写上述方法进行观察。

Activity的4种加载模式:

这里提到的加载模式就是在AndroidManifest.xml文件中配置Activity时用到Android:launchMode属性,该属性用来配置Activity的加载模式。
该属性有4个属性值:
  • standard:标准模式,默认的加载模式。
  • singleTop:Task顶单例模式。
  • singleTask:Task内单例模式。
  • singleInstance:全局单例模式。
在官方API中有简单的介绍: 点击打开链接  任务和返回堆栈
讲加载模式前先介绍点Android对Activity的管理:Android采用Task来管理多个Activity,当我们启动一个app时,Android就会创建一个Task,然后启动这个app的入口Activity(即AndroidManifest.xml中<intent-fliter.../>中配置为MAIN和LAUNCHER的Activity)。这里的Task可以理解成Activity栈,栈顶为启动的Activity,栈底为其他Activity。 Android的加载模式,就负责管理实例化,Activity的加载方式,并可以控制Activity与Task之间的加载关系。

下面对4中加载方式进行详细的介绍:

1、standard模式
在使用这种模式启动Activity时,系统会为目标Activity创建一个新的实例,并将新的Activity添加到栈中,但不会创建新的栈。
我们可以通过Activity的getTaskId()方法来获取当前Activity所在的Task的ID,进而进行观察。
2、singleTop模式
这种模式在启动Activity时,如果要被启动的Activity已经位于栈顶,则系统不会创建新的Activity实例,而是通过调用onNewIntent()方法使用已有的Activity实例。
如果要启动的Activity没有位于栈顶,则系统会创建新的Activity实例,并将器加载到栈顶,此时就跟standard模式相同。
3、singleTask模式
采用这种加载模式时,同一个栈内只有一个目标Activity的实例,如果将要启动的目标Activity不存在,系统将会创建一个Activity的实例并将其加载到栈顶;如果目标Activity已经存在且位于栈顶,此时与singleTop模式相同。这种加载模式允许其他(standard和singleTop)Activity加载到目标Activity所在的栈中,如果Activity已存在但不在栈顶,要打开目标Activity的话,则移出目标Activity上面的所以Activity,使目标Activity位于栈顶。
4、singleInstance模式
这种加载模式与SingleTask模式类似,不同点在于,系统不允许其他Activity加载到目标Activity所在的栈中,目标Activity一直是栈中唯一的成员,并且一直位于栈顶(前台是目标Activity存在);如果目标Activity不存在的话,系统会创建一个新的栈,再创建目标Activity的实例,并将其加载到新的栈的栈顶。

总结:标准模式是默认模式,适合大多数类型的Activity,singleTop对于许多类型的Activity也是常见的发射模式;而对于singleTask和singleInstance,不适合大多数应用程序。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值