Android中的Task和启动模式

今天简单了解了一下android中activity的启动模式和task内容,后面会随时补充和拓展。

android系统中的任务是如何运行的呢?当我们启动了一个手机应用时,一个task就启动了,后面可能会涉及多个activity的界面,这些activity的运行状态会被存储到Task的Activity堆栈中去。和普通的堆栈原理一样,activity的堆栈也是采用的"后进先出"原则。当我们启动一个新的activity时,它就会被push在活动堆栈的顶部,而每次按back键,当前的活动就会被弹出堆栈,而我们按home键,这时候task就会失去焦点并被保存在内存中,一旦重新启动,task便会将上次activity的界面读出并显示。

为了便于控制任务中activity的启动的控制,android为我们提供了一些方法来改变其启动模式。主要有两种方法来对其进行控制:

1.在menifest文件中的<activity/>标签中的launchMode属性对活动的启动方式进行控制:

它一共为我们提供了四种启动方式:

standard:标准模式,启动模式中的默认模式,无论打开新的activity还是intent接收消息,系统都会为该activity创建一个新的实例,缺点是太耗费资源

singleTop:如果该activity处于栈顶,即最后一个创建的activity,那么它接收intent消息或者其他activity通过intent跳转到该activity不需要重新创建一个实例,而是通过onNewIntent方法处理接收的消息,这种模式在一定程度上减少了资源浪费。

singleTask:该模式保证同一个activity在活动堆栈中只存在一个实例,而且存在于栈底。此模式比较节省资源,手机浏览器一般使用这种模式。在这种模式下,无论跳转的对象是不是位于栈顶的activity,程序都不会生成一个新的实例(当然前提是栈里面已经有这个实例)。这种模式相当有用,在以后的多activity开发中, 经常会因为跳转的关系导致同个页面生成多个实例,这个在用户体验上始终有点不好,而如果你将对应的activity声明为 singleTask 模式,这种问题将不复存在。

singleInstance:类似于singleTask,不同之处在于该模式让activity独自占据一个task,其他activity不能存在于这个task中。

2.通过设置Intent的flag属性来改变activity的启动模式

.FLAG_ACTIVITY_NEW_TASK:等同于上面的singleTask

.FLAG_ACTIVITY_SINGLE_TOP:等同于上面的singleTop

.FLAG_ACTIVITY_CLEAR_TOP:如果activity的实例已存在,该方法将会清除其所在栈的其他所有activity实例。


    最近恶补基础,多多看书记笔记,加油!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值