溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Activity的生命周期、生命周期流程以及和四種狀態(tài)介紹

發(fā)布時(shí)間:2020-06-02 21:29:46 來(lái)源:億速云 閱讀:700 作者:Leah 欄目:編程語(yǔ)言

這篇文章的知識(shí)點(diǎn)包括:Activity的生命周期介紹、生命周期流程介紹以及Activity的四種狀態(tài),閱讀完整文相信大家對(duì)Activity會(huì)有一定的認(rèn)識(shí)。

Activity生命周期的概念:

Activity作為Android的四大組件之一,非常的重要,也是最常用的四大組件,使用Activity必須要在AndroidManifest中進(jìn)行注冊(cè)。Activity相當(dāng)于一個(gè)servlet,我們的Activity處在這個(gè)容器中,一切創(chuàng)建實(shí)例、初始化、銷毀實(shí)例等過(guò)程都是容器來(lái)調(diào)用的,這也就是所謂的“Don't call me, I'll call you.”機(jī)制。

 

Activity的生命周期流程:

 onCreate()--->onStart()--->onResume()--->onPause()--->onStop()--->onDestory()

 onCreate():當(dāng)activity是被創(chuàng)建時(shí)候,會(huì)自動(dòng)運(yùn)行該方法。該方法做一些初始化動(dòng)作,比如創(chuàng)建views,設(shè)置數(shù)據(jù)到list等等,該方法提供了一個(gè)Bundle類型的變量,該變量中有這個(gè)activity以前的狀態(tài)信息,前提是以前存過(guò)這些信息。這個(gè)方法執(zhí)行完后執(zhí)行的是onStart()方法;若在onCreate方法中加入finish()方法,onCreate下一個(gè)運(yùn)行onDestroy方法。

onRestart():把a(bǔ)ctivity從onStop狀態(tài)喚醒時(shí),會(huì)用onRestart方法,該方法優(yōu)先于再次運(yùn)行的onStart,運(yùn)行完onRestart之后運(yùn)行onStart。若在onRestart()方法中加入finish()語(yǔ)句,則還是會(huì)繼續(xù)運(yùn)行onStart及后面的狀態(tài)方法直到onDestroy運(yùn)行完

onStart():當(dāng)activity對(duì)用戶可見時(shí)會(huì)調(diào)用onStart,當(dāng)activity在前臺(tái)顯示時(shí),會(huì)運(yùn)行onResume;當(dāng)activity還沒(méi)在前臺(tái)顯示就被隱藏(停止?fàn)顟B(tài))了會(huì)運(yùn)行onStop(),比如在onStart方法中用了finish()方法的話,onStart()之后就會(huì)直接運(yùn)行onStop->onDestroy。

onResume():當(dāng)activity開始與用戶交互時(shí),會(huì)調(diào)用onResume,并且為了用戶操作此時(shí)該activity位于activity棧的頂部。經(jīng)過(guò)某些操作后該方法執(zhí)行完后執(zhí)行的是onPause()

onPause():當(dāng)一個(gè)activity運(yùn)行到onResume方法后,不管是這個(gè)activity要銷毀還是要暫停或停止,都會(huì)調(diào)用該方法。這個(gè)方法之后有可能是onResume也有可能是onStop,若是在這個(gè)activity-A中打開一個(gè)不完全覆蓋這個(gè)activity-A的新activity-B,那么activity-A就會(huì)是onPause狀態(tài),當(dāng)activity-B退出時(shí),activity-A就直接運(yùn)行onResume(前提是onPause的方法執(zhí)行完了,否則會(huì)等onPause方法執(zhí)行完后才運(yùn)行onResume方法,所以不建議在這個(gè)方法中執(zhí)行CPU密集的操作)。若是需要退出activity-A,那么下一個(gè)就會(huì)執(zhí)行onStop。onPause()用于提交未保存發(fā)生變化了的持久化數(shù)據(jù),及停止動(dòng)畫及其他其他比較消耗CPU的事件(比如廣播接收器,傳感器(比如GPS),或者消耗電量的資源),這是為了更好的運(yùn)行新的activity。

onStop():當(dāng)這個(gè)activity完全看不見的時(shí)候,會(huì)調(diào)用onStop方法,因?yàn)榱硪粋€(gè)activity會(huì)調(diào)用onResume并且覆蓋這個(gè)activity。以下三種情況都會(huì)使這個(gè)activity調(diào)用onStop()方法,第一種是一個(gè)新的activity被執(zhí)行,第二種是一個(gè)已經(jīng)存在的activity被切換到最前端,第三種是這個(gè)activity要被銷毀。如果通過(guò)用戶召回這個(gè)activity,那么會(huì)調(diào)用onRestart方法;若這個(gè)activity要被銷毀,則調(diào)用onDestroy方法。

onDestroy():當(dāng)activity銷毀前會(huì)調(diào)用該方法,比如發(fā)生如下情況:activity調(diào)用了finish()方法來(lái)結(jié)束這個(gè)activity,或者因?yàn)橄到y(tǒng)為了節(jié)省空間而臨時(shí)銷毀這個(gè)activity,這兩個(gè)情況可以通過(guò)isFinishing()方法判斷。

 

Activity的四個(gè)狀態(tài):

1、running->當(dāng)前顯示在屏幕的activity(位于任務(wù)棧的頂部),用戶可見狀態(tài)。

2、poused->依舊在用戶可見狀態(tài),但是界面焦點(diǎn)已經(jīng)失去,此Activity無(wú)法與用戶進(jìn)行交互。

3、stopped->用戶看不到當(dāng)前界面,也無(wú)法與用戶進(jìn)行交互 完全被覆蓋。

4、killed->當(dāng)前界面被銷毀,等待這系統(tǒng)被回收。

 

看完上述內(nèi)容,你們對(duì)Activity有進(jìn)一步的了解嗎?如果還想學(xué)到更多技能或想了解更多相關(guān)內(nèi)容,歡迎關(guān)注億速云行業(yè)資訊頻道,感謝各位的閱讀!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI