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--------------------------------

相關文章
相關標籤/搜索