Android 深入探讨Activity的四种启动模式

四种启动模式的异同点

1.singleTask,singletop,singleInstance 某种情况下基本上都具有保证Activity在任务栈中具有唯一性

2.singleTask和singleTop实例存在时,singleTask不会创建实例,singleTop如果在栈顶时不会创建实例,否则singleTop会创建实例

3.singleTask+taskAffinity才能产生新栈,singleInstance直接产生独占的新栈,但singletop不能产生新栈

4.singleInstance产生的新栈会“下沉”(如果singleInstance启动了其他Activity,但未被finish的条件下),这时连续keyBack或者finish

那么singleInstace设置的Activity将最后退出,而singleTask的Activity顺序稳定

5.singleTask,singletop,singleInstance均可被finish,但下次启动时,singleTask,singleInstance设置的Activity的TaskID也会发生变化,意味着产生了其他新栈

6如果singleTask启动的ActivityA位于栈底,在栈顶startActivity到这个ActivityA时会调动 onNewIntent->onStart->onResume。

7.如果singletop启动的ActivityB在栈底时,在栈顶startActivity到这个ActivityB时会重新调动 onCreate->onStart->onResume,但不会调用OnDestroy说明创建了新的Activity。

8.singleTask在栈底时,从栈顶startActivity到栈底ActivityA,那么该栈startActivity的发起者的中间部分Activity会被销毁。而singleInstance是逐级跳跃到

栈顶,栈中间的Activity不会被销毁。singleInstance或singleTask设置的Activity在栈顶时均会调用onNewIntent

9.singleInstance,SingleTop创建的Activity在栈顶时不会重复创建,在栈顶以下会自动重新创建。此外,在栈顶的singleTask或者singleInstance设置的Activity再次被startActivity时会调用onNewIntent

10.singleTask,singleInstance不适合充当Child Activity(即通过startActivityForResult启动),因为onActivityResult会提前调用、但singletop和适合

11.在singleTask,singleInstance设置的Activity如果启动了新栈,这时如果按了Home键,之前的Activtiy如启动页面,再次打开时不会进入singleTask,singleInstance设置的页面,而是重新进入启动页,在这里可能会造成信息泄露等问题,因此一般来说,不建议singleTask+taskAffinity启动新栈,但singelInstance视情况而定。如果遇到相应需求,singleTask设置的Activity之前Activity有必要设置 android:clearTaskOnLaunch="true", android:noHistory="true",这样可以避免Home键带来的问题

详细介绍

singleTask

164156_zRiE_2256215.png

singletop

164148_i3Mg_2256215.png

 

(对于追求捕获Home键让app退出的读者是一个喜讯,这样可以做到每次Home之后都能再次进入登录界面),在这个过程中没有直接进入HomeActivity,而是WelcomeActivity(有人说不对么,不应该是这样么,在这里不想解释)。

 

注意,使用了不同作业栈的Activity,会在最近打开的app显示一个应用会出现2个界面。

 

在这里,需要强调一下singleTask+android:taskAffinity不一定必须使用,请依据需求而定,网上有人推荐使用,但我却想说,不要盲目,并不是所有的应用都适合。

 

 1-->  singleTask+android:taskAffinity对于效率而言,优势并不存在,比如设置进程的,但对于带有登录状态的app需要慎用,否则造成信息泄露等问题,开发中只使用singleTask即可。

 2-->  singleTask+android:taskAffinity适用于单用户保密性的app(可做到Home之后下次必须登录才能查看信息),建议在这方面试试。

 

------------------------------2015-08-07更新,加入singleInstance--------------------------------

 

 

 

转载于:https://my.oschina.net/ososchina/blog/347526

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值