Android基础(三) – Activity常用属性

本文详细介绍了Android中Activity的配置选项,包括launchMode、taskAffinity等属性的作用与使用场景,帮助开发者更好地理解和运用这些特性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

主要的Activity属性有:
1、launchMode
2、taskAffinity
3、allowTaskReparenting
4、clearTaskOnLaunch
5、alwaysRetainTaskState
6、finishOnTaskLaunch
详细介绍可以参看Google文档,Tasks and Back Stack

个人理解

1>Activity launchMode设置不为standard,在跳转Activity时,如果新的Activity不再创建新的实例(不执行onCreate) 会调用onNewIntent方法。 (正常生命周期情况不会调用onNewIntent())

2>Activity launchMode singleInstance实用场景—>关于浏览器的LaunchMode为singleTask,所以如果当你点击一个连接下载文件时(由一个activity来处理下载,launchmode为standard),如果再次进入浏览器,那么下载页面就被Destory了,那么这里我们可以把下载页面LaunchMode设置为singleInstance可以解决这个问题.(即:在使用singleTask的情况下 不想关闭的界面可单独新起一个task)

3>taskAffinty对lanuchMode的影响 :

当LanuchMode设置为 standard 和singTop,即使 taskAffinty不同,也不会新起Task.

当LanuchMode设置为 singleTask ,以A启动B来说

1、当A和B的taskAffinity相同时:第一次创建B的实例时,并不会启动新的task,而是直接将B添加到A所在的task;当B的实例已经存在时,将B所在task中位于B之上的全部Activity都删除,B就成为栈顶元素,实现跳转到B的功能。 2、当A和B的taskAffinity不同时:第一次创建B的实例时,会启动新的task,然后将B添加到新建的task中;当B的实例引进存在,将B所在task中位于B之上的全部Activity都删除,B就成为栈顶元素(也是root Activity),实现跳转到B的功能。

当LanuchMode设置为singleInstance

当第一次创建该Activity实例时,会新建一个task,并将该Activity添加到该task中。注意:该task只能容纳该Activity实例,不会再添加其他的Activity实例!如果该Activity实例已经存在于某个task,则直接跳转到该task。

4>allowTaskReparenting 这个属性用来标记一个Activity实例在当前应用退居后台后,是否能从启动它的那个task移动到有共同affinity的task,“true”表示可以移动,“false”表示它必须呆在当前应用的task中,默认值为false。

5>clearTaskOnLaunch

程序回到home界面后,再次点击程序图标的效果。影响的是activity的生命周期。

简单的:

activity A(clearTaskOnLaunch设置为true)(为主界面)

activity B

程序启动A,在启动B。再点击HOME键回到桌面,再点击程序图标,效果是B执行onrestart,B执行ondestory。A界面显示。(如果clearTaskOnLaunch没设置,则是显示B界面)

稍微复杂点的:

activity A(clearTaskOnLaunch设置为true),B(clearTaskOnLaunch设置为true),C

依次启动A,B,C,点击HOME,再在桌面点击图标。启动的是A(执行onrestart),B、C执行(ondestory)。

也就是说,优先启动第一个(A)已注册clearTaskOnLaunch为true的Activity,其余的后启动的activity(B、C)都销毁,除非前面A已经finish销毁,后面的已注册clearTaskOnLaunch为true的activity才会生效。

转载于:https://blog.51cto.com/4397014/2162419

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值