Android 深入探讨sigleTask和singletop,singleInstance的区别

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

Android 深入探讨sigleTask和singletop,singleInstance的区别

singletop

Android 深入探讨sigleTask和singletop,singleInstance的区别


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




你可能感兴趣的:(Android 深入探讨sigleTask和singletop,singleInstance的区别)