Android的四种启动模式

前言

Android的Activity的启动启动模式在面试也是常常被问到的,本人面试几家公司都有问到,比如面试管问:当在应用中的ActivityA跳转到ActivityB,然后按下home键跳到桌面,这时当点击应用图标回跳到应用,当前应用显示的是哪个Activity?面试管问这样的问题可能是考你关于Activity的启动模式的了解,其实面试管想知道四种启动模式分别会产生什么结果。首先举例一个特殊的启动模式,如如果ActivityB的启动模式是singleInstance,回到应用当前展现的视图是ActivityA页面,想知道原因就需要了解这四种启动模式的原理,往下看。

一、Activity的启动模式简介

Activity有四种启动模式,分别是standrad、singleTop、singleTask、singleInstance,默认的启动模式是standrad。

修改启动模式就是在AndroidManifest.xml文件清单文件中修改launchMode的属性,如图下图:

 1.0 standard 模式

该模式是Activity的默认模式,一个Activity的启动模式设置为standard时,每启动一次该Activity都会创建一个实例,并加入到启动该Activity的那个任务栈顶。如下图1.0就是开启一个新的Activity的入栈顺序:Activity1-Activity2-Activity3

退出栈的顺序如下图:

1.1 singleTop 模式

singleTop是一种栈顶复用启动模式,设置这种模式的Activity,如果栈顶已经有该Activity,当新创建该Activity就不会重新创建实例,只会回调onNewIntent方法。如下图:

1.2 singleTask 模式

singleTask是一种栈内复用的启动模式,创建该模式Activity的时候,任务栈要是存在该Activity实例,直接复用已存在的实例,并回调onNewIntent方法,而且会把该Activity之上的Activity移除出栈。如果不存在则新创建实例加入任务栈顶。

如下图,当任务栈中有Activity1和Activity2,Activity1是singleTask启动模式,要是在当前任务栈中再启动一个新的Activity1,因为已经存在Activity1,直接复用,把Activity2移除。

taskAffinity属性

taskAffinity一般和singleTask或者和allowTaskReparenting属性配合使用,当在application和activity中没有指定taskAffinity属性值时,默认任务栈名字为当前包名,要是application制定了taskAffinity任务栈名字,则所有Activity默认是该名字。

1.3 singleInstance模式

单例实例启动模式,设为该启动模式的Activity会存在一个单独的任务栈中,而以上三种启动模式开启新的Activity都存在同一个任务栈中,比如Activity1开启一个Activity2,Activity2是存在新开的任务栈中,

常遇到的坑:

列子1:比如应用第一个页面是Activity1,是默认的standard模式,Activity1开启一个新的Activity2,Activity2是singleInstance启动模式,这时按手机的home按键调到桌面,当从桌面点击图标进入应用时,当前打开的页面是Activity1。出现这样的现象原因,由于退到桌面在进入应用,系统默认启动的是Luancher中Activity的栈,Activity1就是Luancher中的一个任务栈,所以优先启动Activity1,主栈中的所以Activity销毁后,才会回到Activity2所在的栈中显示。

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值