简述Android的四种加载模式

简述Activity的四种加载模式
亲们,这是我在csdn上的第一篇技术博客,有知识点把握不周或者表述不全面的地方请见谅,但还是希望对你有所帮助。很多Android开发者相信对基本的activity(下称aty)都非常熟悉,其启动和关闭,Aty之间的数据交换,回调机制,生命周期与加载模式等,因为我对加载模式存在概念性的理解,一直并未较深层次的学习,所以抽出今晚的时间,专门做一总结,闲话不扯,开始进入正题。
我们先来讨论一个问题,Aty有四种加载模式,那加载模式有什么用?这个首先你的了解Android对activity的管理。Android采用Task来管理多个activity,当你启动一个应用,它会相应的创建一个Task,然后启动应用的入口配置在xml文件的<intent-filter..../>标签。因为Android并未对Task提供API,因此开发者无法真正访问Task,只能通过Aty的getTaskId()方法来获取它所在的Task的ID。我们可以这样理解,把Task当成Aty的栈,Task以栈的形式来管理Aty,先启动的Aty被放在栈底,后启动的放在栈顶。
那么Aty的加载模式就负责管理实例化,加载方式,控制Aty与Task之间的加载关系。
在activity配置时可指定android:launchMode属性用于配置该Aty的加载模式,其支持的4个属性值:
(1)standard:标准模式,也是默认模式
(2)singleTop:栈顶单例模式
(3)singleTask:栈内单例模式
(4)singleInstance:全局单例模式
下面详细介绍各种模式
1、standard模式
通过这种模式启动目标Aty时,Android总会为目标aty创建一个新的实例,将aty添加到当前栈中,这种模式不会启动新的Task,新的Aty都添加在原有的Task中,所以当用户单机手机返回键时,系统会逐一从aty栈顶删除aty实例。
2、singleTop模式
这种与1模式相似,不同点在于当将要启动的aty如果位于栈顶,则不会重新创建aty实例,而是直接复用已有aty实例,如果没有位于栈顶,则与1模式相同。
3、singleTask模式
这种模式加载的aty在同一个Task中只有一个实例,当采用这种模式可以分为三种情况:
(1)如果将要启动的aty不存在,系统将会自动创建新的aty实例,并至于Task栈顶。
(2)如果目标aty已经位于栈顶,此时与2模式相同
(3)如果目标aty已经存在实例,没有位于栈顶,则移除所有位于目标aty上的实例,使目标aty位于栈顶。
所以当用户点击返回按钮时,aty实例从栈顶开始移除。
4、singleInstance模式
在这种模式下,系统保证无论从那个Task中启动目标aty,只会创建一个目标aty实例,并会使用全新的Task栈来加载该实例。
可分为两种情况:
(1)如果启动目标aty不存在,系统先创建一个新的Task,在创建目标aty实例,并加入新的Task栈顶。
(2)如果目标aty已经存在,无论它位于那个应用程序中,哪个Task中,系统都会把该aty所在Task转到前台,从而使其显示出来。
所以采用这种模式加载aty总位于task栈顶,且采用这种模式加载的aty所在Task只包含该aty。
 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值