首頁(yè)技術(shù)文章正文

什么是生命周期?Activity生命周期的三種狀態(tài)

更新時(shí)間:2022-04-12 來(lái)源:黑馬程序員 瀏覽量:

什么是生命周期

生命周期就是一個(gè)對(duì)象從創(chuàng)建到銷毀的過(guò)程,每一個(gè)對(duì)象都有自己的生命周期。同樣,Activity也具有相應(yīng)的生命周期,Activity的生命周期中分為三種狀態(tài),分別是運(yùn)行狀態(tài)、暫停狀態(tài)和停止?fàn)顟B(tài)。接下來(lái)將針對(duì)Activity生命周期的三種狀態(tài)進(jìn)行詳細(xì)地講解。

Activity生命周期

1、運(yùn)行狀態(tài)

當(dāng)Activity在屏幕的最前端時(shí),它是可見(jiàn)的、有焦點(diǎn)的??梢杂脕?lái)處理用戶的常見(jiàn)操作,如點(diǎn)擊、雙擊、長(zhǎng)按事件等,這種狀態(tài)稱為運(yùn)行狀態(tài)。

2、暫停狀態(tài)

在某些情況下,Activity對(duì)用戶來(lái)說(shuō)仍然是可見(jiàn)的,但它不再擁有焦點(diǎn),即用戶對(duì)它的操作是沒(méi)有實(shí)際意義的。例如,當(dāng)最上面的Activity沒(méi)有完全覆蓋屏幕或者是透明的,被覆蓋的Activity仍然對(duì)用戶可見(jiàn),并且存活(它保留著所有的狀態(tài)和成員信息并保持與Activity管理器的連接)。但當(dāng)內(nèi)存不足時(shí),這個(gè)暫停狀態(tài)的Activity可能會(huì)被殺死。

3、停止?fàn)顟B(tài)

當(dāng)Activity完全不可見(jiàn)時(shí),它就處于停止?fàn)顟B(tài),但仍然保留著當(dāng)前狀態(tài)和成員信息。然而這些對(duì)用戶來(lái)說(shuō)都是不可見(jiàn)的,如果當(dāng)系統(tǒng)內(nèi)存不足時(shí),這個(gè)Activity很容易被殺死。

值得一提的是,當(dāng)Activity處于運(yùn)行狀態(tài)時(shí),Android會(huì)盡可能地保持它的運(yùn)行,即使出現(xiàn)內(nèi)存不足的情況,Android也會(huì)先殺死棧底部的Activity,來(lái)確??梢?jiàn)的Activity正常運(yùn)行。

Activity從一種狀態(tài)轉(zhuǎn)變到另一種狀態(tài)時(shí)會(huì)觸發(fā)一些事件,執(zhí)行一些回調(diào)方法來(lái)通知狀態(tài)的變化,具體方法如下所示:

  • void onCreate(Bundle savedInstanceState):創(chuàng)建時(shí)執(zhí)行
  • void onStart():可見(jiàn)時(shí)執(zhí)行
  • void onRestart():回到前臺(tái),再次可見(jiàn)時(shí)執(zhí)行
  • void onResume():獲取焦點(diǎn)時(shí)執(zhí)行
  • void onPause():失去焦點(diǎn)時(shí)執(zhí)行
  • void onStop():用戶不可見(jiàn)進(jìn)入后臺(tái)時(shí)執(zhí)行
  • void onDestroy():銷毀時(shí)執(zhí)行

為了讓初學(xué)者更好理解Activity的三種狀態(tài)以及不同狀態(tài)時(shí)使用的方法,Google公司專門提供了一個(gè)Activity生命周期模型的圖例,具體如下圖所示。

Activity的生命周期

從圖中可以看出,當(dāng)Activity從啟動(dòng)到關(guān)閉時(shí),會(huì)依次執(zhí)行【onCreate()】→【onStart()】→【onResume()】→【onPause()】→【onStop()】→【onDestroy()】方法。當(dāng)Activity執(zhí)行到onPause()方法失去焦點(diǎn)時(shí),重新調(diào)用回到前臺(tái)會(huì)執(zhí)行onResume()方法,如果此時(shí)進(jìn)程被殺死Activity重新執(zhí)行時(shí)會(huì)先執(zhí)行onCreate()方法。當(dāng)執(zhí)行到onStop()方法Activity不可見(jiàn)時(shí),再次回到前臺(tái)會(huì)執(zhí)行onRestart()方法,如果此時(shí)進(jìn)程被殺死Activity會(huì)重新執(zhí)行onCreate()方法。





分享到:
在線咨詢 我要報(bào)名
和我們?cè)诰€交談!