Activity生命周期?
OnCreate() 當前頁面被創(chuàng)建
onStart() 當前頁面被啟動
onResume() 頁面可視 當前頁面處于棧頂 可以看到 并且 可以與用戶進行交互 就處于這個生命周期
OnPause() 在這個生命周期中 頁面可視 但是 被其他的有所遮擋 不可以與用戶交互 正在停止
onStop() 頁面不可見 即將被GC回收器回收 就處于這個生命周期
onDestory() 當當前界面被銷毀的時候就會走這個生命周期 此時當前頁面已經(jīng)完全被銷毀 GC回收器已經(jīng)將其回收 做出了釋放
onRestart() 當用戶按下返回鍵回到主頁面以后 再次進入App 才會走onRestart
啟動一個Activity:onCreate-onStart-onResume
返回到主界面:onPause-onStop-onDestory
home鍵:onPause-onStop;????然后再次啟動:onRestart-onStart-onResume
從一個Activity跳轉(zhuǎn)到另一個Activity,第一個Activity:onPause-onStop冒签,第二個Activity:onCreate-onStart-onResume
從第二個Activity返回到第一個Activity冕房,第二個onPause-onStop-onDestory,第一個onRestart-onStart-onResume
橫豎屏切換:onPause-onStop-onDestory-onRestart-onStart-onResume
按下電源鍵:onPause-onStop
任務(wù)棧和啟動模式
當我們每打開一個Activity的時候它會就往Activity任務(wù)棧中壓入一個Activity份殿,當我們每銷毀一個Activity的時候它會從Activity任務(wù)棧中彈出一個Activity炕檩,由于安卓系統(tǒng)自身的設(shè)計欲低,我們只能在手機屏幕上獲取當前一個Activity的焦點即棧頂元素(最上面的Activity),其余的Activity會暫居后臺等待系統(tǒng)調(diào)用辑舷。
關(guān)于任務(wù)棧的概念:
任務(wù)棧是用來提升體驗而設(shè)計的:
(1) 程序打開時就創(chuàng)建了一個任務(wù)棧, 用于存儲當前程序的activity,當前程序(包括被當前程序所調(diào)用的)所有的activity屬于一個任務(wù)棧槽片。
(2) 一個任務(wù)棧包含了一個activity的集合, 可以有序的選擇哪一個activity和用戶進行交互何缓,只有在任務(wù)棧棧頂?shù)腶ctivity才可以跟用戶進行交互。
(3) 任務(wù)椈顾ǎ可以移動到后臺碌廓,并且保留了每一個activity的狀態(tài). 并且有序的給用戶列出它們的任務(wù), 而且還不丟失它們狀態(tài)信息。
(4) 退出應(yīng)用程序時剩盒,當把所有的任務(wù)棧中所有的activity清除出棧時,任務(wù)棧會被銷毀,程序退出谷婆。
Activity的4種啟動方式
為了解決任務(wù)棧產(chǎn)生的問題,Android為Activity設(shè)計了啟動模式辽聊。
啟動模式(launchMode)在多個Activity跳轉(zhuǎn)的過程中扮演著重要的角色纪挎,它可以解決是否生成新的Activity實例,是否重用已經(jīng)存在的Activity實例跟匆,是否和其他實例共用一個任務(wù)棧异袄。任務(wù)棧是一個具有棧結(jié)構(gòu)的對象,一個任務(wù)椉致粒可以管理多個Activity隙轻,每啟動一個應(yīng)用,也就創(chuàng)建一個與之對應(yīng)的任務(wù)棧垢揩。
Activity一共有以下四種launchMode模式:1玖绿、standard 2、singTop 3叁巨、singTask 4斑匪、singleInstance,我們可以在AndroidManifest.xml配置<activity>的android:launchMode屬性-為以上四種之一即可锋勺。
1?standard蚀瘸。在Activity啟動模式為standard(默認)的情況下,不管之前有沒有Activity實例庶橱,每一次啟動Activity都會創(chuàng)建一個新的Activity實例贮勃,并置于Activity任務(wù)棧棧頂。
2 singTop苏章。在Activity啟動模式為singleTop(棧頂任務(wù)唯一)的情況下寂嘉,如果當前Activity處于棧頂奏瞬,那么它就不會再去實例化一個新的Activity,當Activity不處于棧頂?shù)臅r候泉孩,會重新實例化一個新的Activity并置于棧頂硼端。
3 singTask。在Activity啟動模式為singleTask(唯一實例)的情況下寓搬,當啟動Activity的時候珍昨,如果當前Activity不存在則實例化一個新的Activity,如果當前Activity在任務(wù)棧中已經(jīng)存在句喷,則會復用這個Activity實例
4 singleInstance镣典。和singleTask一樣保持唯一實例,然后它的退出順序是不再是根據(jù)調(diào)用順序脏嚷,而是在不同的任務(wù)棧中骆撇,從上往下退出。
設(shè)置啟動模式設(shè)置啟動模式的方法有兩種
?- 通過在AndroidMainifest文件中的屬性 android:launchMode 來設(shè)置Activity的啟動模式
?- 通過設(shè)置Intent的Flag來設(shè)置一個Activity的啟動模式
Intent.FLAG_ACTIVITY_NEW_TASK 創(chuàng)建一個新的Task來啟動一個Activity父叙,但啟動的每個Activity都將在一個新的Task中,該Flag通常使用于從service中啟動Activity的場景神郊。 - Intent.FLAG_ACTIVITY_SINGLE_TOP 使用singletop的模式來啟動一個Activity - Intent.FLAG_ACTIVITY_CLEAR_TOP 使用singleTask模式來啟動一個Activity - Intent.FLAG_ACTIVITY_NO_HISTORY 使用這種模式啟動Activity,當該Activity啟動其他Activity后趾唱,該Activity就會消失涌乳,不會保留在Activity棧中。 如A-B甜癞,B以這種模式啟動C夕晓,C啟動D,則當前Activity棧中只有ABD悠咱。?