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

四种启动模式的异同点

1.singleTask,singletop,singleInstance 某种状况下基本上都具备保证Activity在任务栈中具备惟一性android

2.singleTask和singleTop实例存在时,singleTask不会建立实例,singleTop若是在栈顶时不会建立实例,不然singleTop会建立实例面试

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

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

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

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

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

7.若是singletop启动的ActivityB在栈底时,在栈顶startActivity到这个ActivityB时会从新调动 onCreate->onStart->onResume,但不会调用OnDestroy说明建立了新的Activity。效率

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

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

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

singletop

 

(对于追求捕获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--------------------------------

相关文章
相关标签/搜索