群英传学习笔记

本文详细介绍了Android中四种Activity启动模式:singleTop、singleTask、singleInstance及其应用场景,并解释了如何利用这些模式实现特定功能,比如退出整个应用程序。

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

内容一:Activity的任务栈
singleTop的应用场景:
这种启动模式通常适用于接收到信息后显示的界面,例如QQ接收到消息后弹出Actvity,如果一次来10条短信,总不能一次弹10个Activity。
singleTask的应用场景:
如果该Activity不是在栈顶,那么在这个Activity之上的Activity全部被销毁。不过,这种情况指的是在同一个app中启动这个Activity,如果是其他程序以singleTask的模式来启动这个Activity,那么它将创建一个新的任务栈。不过有一点要注意的hi,如果启动的模式是singleTask的Activity已经在一个后台的任务栈中了,那么启动后,这么后台任务栈将一起被切换到前台。

可以发现,使用这个模式创建的Activity不是在新的任务栈中被打开,就是将已经打开的Activity切换到前台,所以这种模式可以退出整个应用:将主Activity设置为singleTask模式,然后在要退出的Activity中转到主Activity,从而将主Activity之上的Activity都清除,然后重写主Activity的onNewIntent()方法,在方法中加上一句finish(),将最后一个activity结束掉。
singleInstance模式:
这种模式通常用于需要与程序分离的界面,如在setupWizard中调用紧急呼叫。

关于singleTop和singleInstance还有一点要注意:如果在singleTop和singleInstance的Activity A中通过startActivityForResult启动另一个ActivityB,那么系统将直接返回Activity.RESULT_CANCELED而不会去等待返回。因为Android开发者认为,不同Task之间,默认是不能传递数据的,如果要传递数据,应该使用Intent来传递。

清空任务栈:
通常情况下可以在清单文件中的<activity>标签中使用以下几种属性来清理任务栈。
  1. clearTaskOnLaunch:在每次返回该Activity都把该Activity之上的Activity都清除。通过这个属性,可以让这个Task每次在初始化的时候,都只有这一个activity。
  2. finishOnTaskLauch
  3. alwaysRetainTaskState:该Activity所在的Task将不接收任何的清理命令
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值