Activity的启动模式

本文详细解析了Android中Activity的启动模式,包括singleTop、singleTask和singleInstance。讲解了如何通过Intent标志动态改变Activity行为,强调了 FLAG_ACTIVITY_SINGLE_TOP 和 FLAG_ACTIVITY_NEW_TASK 的作用。还介绍了Task Affinity的概念,以及何时会创建新的任务栈。文章提到在实际应用中,如新闻客户端详情页和应用退出场景下的合理配置,并警告了避免在MainActivity设置singleTask的陷阱。最后提到了singleInstance模式在系统应用中的使用,并指出所有单例模式的Activity都会调用onNewIntent方法。
摘要由CSDN通过智能技术生成

FLAG_ACTIVITY_SINGLE_TOP 等价于 singleTop。位于栈顶的Activity会重用实例,调用onNewIntent函数接收intent。

Intent intent = new Intent(this, MainActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
startActivity(intent);

FLAG_ACTIVITY_SINGLE_NEW_TASK

启动新的TASK,这个新的TASK取决于xml中设置的TaskAffinity(亲和性)属性。

首先去寻找是否存在相同亲和性的任务,如果存在,那么直接将这个Activity加入到这个任务中。若不存在,则新建一个任务来加入Activity。

FLAG_ACTIVITY_CLEAR_TOP

会将位于此Activity上放的Activity进行出栈销毁。

// singleTask的行为可使用代码表示为
Intent intent = new Intent(this, MainActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);

两者区别:

xml设置为静态的,intent标记是动态的。

intent标记Flag的优先级更高一些。所以当标记Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP后,尽管Activity为默认的standard模式&

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值