Activity

Activity生命周期?

OnCreate() 當(dāng)前頁面被創(chuàng)建

onStart() 當(dāng)前頁面被啟動

onResume() 頁面可視 當(dāng)前頁面處于棧頂 可以看到 并且 可以與用戶進(jìn)行交互 就處于這個生命周期

OnPause() 在這個生命周期中 頁面可視 但是 被其他的有所遮擋 不可以與用戶交互 正在停止

onStop() 頁面不可見 即將被GC回收器回收 就處于這個生命周期

onDestory() 當(dāng)當(dāng)前界面被銷毀的時候就會走這個生命周期 此時當(dāng)前頁面已經(jīng)完全被銷毀 GC回收器已經(jīng)將其回收 做出了釋放

onRestart() 當(dāng)用戶按下返回鍵回到主頁面以后 再次進(jìn)入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ù)棧和啟動模式

當(dāng)我們每打開一個Activity的時候它會就往Activity任務(wù)棧中壓入一個Activity,當(dāng)我們每銷毀一個Activity的時候它會從Activity任務(wù)棧中彈出一個Activity,由于安卓系統(tǒng)自身的設(shè)計,我們只能在手機(jī)屏幕上獲取當(dāng)前一個Activity的焦點即棧頂元素(最上面的Activity),其余的Activity會暫居后臺等待系統(tǒng)調(diào)用。

關(guān)于任務(wù)棧的概念:

任務(wù)棧是用來提升體驗而設(shè)計的:

(1) 程序打開時就創(chuàng)建了一個任務(wù)棧, 用于存儲當(dāng)前程序的activity,當(dāng)前程序(包括被當(dāng)前程序所調(diào)用的)所有的activity屬于一個任務(wù)棧。

(2) 一個任務(wù)棧包含了一個activity的集合, 可以有序的選擇哪一個activity和用戶進(jìn)行交互,只有在任務(wù)棧棧頂?shù)腶ctivity才可以跟用戶進(jìn)行交互。

(3) 任務(wù)??梢砸苿拥胶笈_,并且保留了每一個activity的狀態(tài). 并且有序的給用戶列出它們的任務(wù), 而且還不丟失它們狀態(tài)信息。

(4) 退出應(yīng)用程序時,當(dā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(默認(rèn))的情況下,不管之前有沒有Activity實例,每一次啟動Activity都會創(chuàng)建一個新的Activity實例,并置于Activity任務(wù)棧棧頂。

2 singTop。在Activity啟動模式為singleTop(棧頂任務(wù)唯一)的情況下,如果當(dāng)前Activity處于棧頂,那么它就不會再去實例化一個新的Activity,當(dāng)Activity不處于棧頂?shù)臅r候,會重新實例化一個新的Activity并置于棧頂。

3 singTask。在Activity啟動模式為singleTask(唯一實例)的情況下,當(dāng)啟動Activity的時候,如果當(dāng)前Activity不存在則實例化一個新的Activity,如果當(dāng)前Activity在任務(wù)棧中已經(jīng)存在,則會復(fù)用這個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,當(dāng)該Activity啟動其他Activity后,該Activity就會消失,不會保留在Activity棧中。 如A-B,B以這種模式啟動C,C啟動D,則當(dāng)前Activity棧中只有ABD。?

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Activity 一、四種形態(tài) 運行狀態(tài): 當(dāng) Activity 處于棧的頂層,可見,并可與用戶進(jìn)行交互 onRe...
    任教主來也閱讀 1,883評論 1 10
  • 第一章主要講了以下幾個知識點: Activity生命周期 Activity的啟動模式 IntentFilter匹配...
    Utte閱讀 1,287評論 0 3
  • Android的開發(fā)中我們大部分都是和Activity打交道,而想很好的運用Activity首先必須要清楚Acti...
    云天隨筆閱讀 1,328評論 0 1
  • 學(xué)習(xí)資料: Android群英傳 Android開發(fā)藝術(shù)探索 Activity是與用戶交互的第一接口,感覺說是四大...
    英勇青銅5閱讀 2,851評論 15 41
  • 歲暮天寒,雪舞蹁躚。羈旅地,十載又三。鄉(xiāng)音偶聞,故友難見。夢鄉(xiāng)月明,鄉(xiāng)水甜,兒伴喚。 驊騮向北,越鳥思南。又何懼,...
    扁舟孑閱讀 1,202評論 6 26

友情鏈接更多精彩內(nèi)容