Activity的四种启动模式

Activity在启动的时候可以根据AndroidManifest清单文件中配置的android:launchMode属性来选择不同的加载模式。这四种模式分别是standard,singleTop,singTask和singleInstance。
研究启动模式之前首先了解一下Task:Android使用Task来管理多个Activity,当我们启动一个应用时,Android就为我们创建了一个Task,然后启动这个应用的入口Activity。Task是一个有点麻烦的概念,因为Android并没有为我们提供Task的api,开发者没法真正的去访问Task,我们只能通过调用Activity的getTaskID()方法来获取它所在的Task的ID。事实上我们可以把Task理解成Activity栈,Task以栈的形式来管理Activity:先启动的Activity被放在Task栈底,后启动的Activity被放在Task栈顶。

  • 只有栈顶的Activity才可以和用户进行交互
  • 在关闭应用的时候,只有全部Activity都从Task中出栈,Task栈本身才可以销毁
  • 并不一定一个应用的所有Activity都在同一个Task栈里,而不同应用调用的Activity则有可能在同一个栈里。

接下来开始Activity的研究启动模式。

  • Standard 模式

    这是Activity默认的启动模式,使用这个加载模式可以不需要在AndroidManifest中显示的指定。每次通过这种模式来启动目标Activity时,Android总会为目标Activity创建一个新的实例,并将该Activity添加到当前Task栈中——这种模式不会启动新的Task,但也完全不考虑是否已经存在目标Activity,新Activity将被添加到原有的Task中。当按下back键时系统会逐一从Activity栈顶删除Activity实例。

  • singleTop 模式(Task内单例模式)

    这种模式与Standard模式相似,不同之处在于:当将要被启动的目标Activity已经位于Task栈顶时,系统不会重新创建目标Activity实例,而是直接复用已有的Activity实例,这时目标Activity的onCreate()方法和onStart()方法都不会被调用,Activity的onNewIntent方法会被调用

protected void onNewIntent(Intent intent) {
    super.onNewIntent(intent);
}
  • SingleTask模式(Task内单例模式)

    这种模式和singleTop模式有些相似,不同的地方在于singleTop只在Task栈顶有目标Activity的时候进行复用,而singleTask则是判断全栈中是否有目标Activity的实例,如果有并且在栈顶,那么和singleTop的行为相同;如果有但是不在栈顶,那么会把该Activity上面的所有Activity移出Task栈,从而使目标Activity来到栈顶,这时目标Activity的onCreate()方法和onStart()方法都不会被调用,Activity的onNewIntent方法会被调用;如果没有目标Activity的实例那么行为和standard和singleTop模式相同:创建目标Activity的实例并放入Task栈顶。

  • singleInstance 模式(全局单例模式)

    这种加载模式下,系统保证无论从哪个Task中启动目标Activity,智慧创建一个Activity实例,并且使用一个全新的Task栈来装载该Activity实例,这个Task也只装载这一个Activity实例(独占)。
    如果将要启动的Activity已经存在,无论它位于哪个应用中,无论位于哪个Task中,系统将会把该Activity所在的Task转到前台,从而是Activity显示出来。(这里涉及到前台Task与后台Task的问题了)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值