筆記一:activity生命周期

轉(zhuǎn):http://blog.csdn.net/qq_23547831/article/details/41693807

Activity生命周期

在系統(tǒng)中的Activity被一個Activity棧所管理。當一個新的Activity啟動時,將被放置到棧頂,成為運行中的Activity,前一個Activity保留在棧中,不再放到前臺,直到新的Activity退出為止。

一、Activity有四種本質(zhì)區(qū)別的狀態(tài):

1.在屏幕的前臺(Activity棧頂),叫做活動狀態(tài)或者運行狀態(tài)(active or running);

2.如果一個Activity失去焦點,但是依然可見(一個新的非全屏的Activity或者一個透明的Activity被放置在棧頂),叫做暫停狀態(tài)(Paused)。一個暫停狀態(tài)的Activity依然保持活力(保持所有的狀態(tài),成員信息,和窗口管理器保持連接),但是在系統(tǒng)內(nèi)存極端低下的時候?qū)⒈粴⒌簟?/p>

3.如果一個Activity被另外的Activity完全覆蓋掉,叫做停止狀態(tài)(Stopped)。它依然保持所有狀態(tài)和成員信息,但是它不再可見,所以它的窗口被隱藏,當系統(tǒng)內(nèi)存需要被用在其他地方的時候,Stopped的Activity將被殺掉。

4.如果一個Activity是Paused或者Stopped狀態(tài),系統(tǒng)可以將該Activity從內(nèi)存中刪除,Android系統(tǒng)采用兩種方式進行刪除,要么要求該Activity結(jié)束,要么直接殺掉它的進程。當該Activity再次顯示給用戶時,它必須重新開始和重置前面的狀態(tài)。

二、

activity生命周期圖

在上圖中,Activity有三個關鍵的循環(huán):

1.整個的生命周期,從onCreate(Bundle)開始到onDestroy()結(jié)束。Activity在onCreate()設置所有的“全局”狀態(tài),在onDestory()釋放所有的資源。例如:某個Activity有一個在后臺運行的線程,用于從網(wǎng)絡下載數(shù)據(jù),則該Activity可以在onCreate()中創(chuàng)建線程,在onDestory()中停止線程。

2.可見的生命周期,從onStart()開始到onStop()結(jié)束。在這段時間,可以看到Activity在屏幕上,盡管有可能不在前臺,不能和用戶交互。在這兩個接口之間,需要保持顯示給用戶的UI數(shù)據(jù)和資源等,例如:可以在onStart中注冊一個IntentReceiver來監(jiān)聽數(shù)據(jù)變化導致UI的變動,當不再需要顯示時候,可以在onStop()中注銷它。onStart(),onStop()都可以被多次調(diào)用,因為Activity隨時可以在可見和隱藏之間轉(zhuǎn)換。

3.前臺的生命周期,從onResume()開始到onPause()結(jié)束。在這段時間里,該Activity處于所有Activity的最前面,和用戶進行交互。Activity可以經(jīng)常性地在resumed和paused狀態(tài)之間切換,例如:當設備準備休眠時,當一個Activity處理結(jié)果被分發(fā)時,當一個新的Intent被分發(fā)時。所以在這些接口方法中的代碼應該屬于非常輕量級的。

可以從三個階段關注Activity的生命周期

?整個的生命周期,指的是onCreate(Bundle)和onDestroy()之間過程。Activity在onCreate()設置所有的“全局”狀態(tài),在onDestroy()釋放所有的資源。

?可見的生命周期,指的是onStart()onStop()之間的過程。在這段時間,可以看到Activity在屏幕上,盡管有可能不在前臺,不能和用戶交互。在這兩個接口之間,需要保持顯示給用戶的UI數(shù)據(jù)和資源等。onStart(),onStop()都可以被多次調(diào)用,因為Activity隨時可以在可見和隱藏之間轉(zhuǎn)換。

?前臺的生命周期,指的是onResume()onPause()之間的過程。在這段時間里,該Activity處于所有 Activity的最上面,獲得了用戶焦點。Activity可以經(jīng)常性地在RESUMED和PAUSED狀態(tài)之間切換,所以在這些接口方法中的代碼應該屬于非常輕量級的,避免低效的轉(zhuǎn)換而讓用戶有等待的感覺。

三、由此,我們可以得出下面幾個典型的場景

1) Activity從被裝載到運行。則執(zhí)行順序為:onCreate()->onStart()->onResume();

這是個典型過程,發(fā)生在Activity被系統(tǒng)裝載運行時。

2) Activity從運行到暫停,再到繼續(xù)回到運行。執(zhí)行順序為:onPause()->onResume();

這個過程發(fā)生在Activity被別的Activity遮住了部分UI,失去了用戶焦點,另外那個Activity退出之后,這個Activity再次重新獲得運行。這個過程中該Activity的實例是一直存在。

3) Activity從運行到停止。執(zhí)行順序為:onPause()->onStop();

這個過程發(fā)生在Activity的UI完全被別的Activity遮住了,當然也失去了用戶焦點。這個過程中Activity的實例仍然存在。比如,當Activity正在運行時,按HOME鍵,該Activity就會被執(zhí)行這個過程。

4) Activity從停止到運行。執(zhí)行順序為:onRestart()->onStart()->onResume();

處于STOPPED狀態(tài)并且實例仍然存在的Activity,再次被系統(tǒng)運行時,執(zhí)行這個過程。這個過程是3的逆過程,只是要先執(zhí)行onRestart()而重新獲得執(zhí)行。

5) Activity從運行到銷毀。執(zhí)行順序為:onPause()->onStop()->onDestroy();

這個過程發(fā)生在Activity完全停掉并被銷毀了,所以該Activity的實例也就不存在了。比如,當Activity正在運行時,按BACK鍵,該Activity就會被執(zhí)行這個過程。這個過程可看作是1的逆過程。

6) 被清除出內(nèi)存的Activity重新運行。執(zhí)行順序為:onCreate()->onStart()->onResume();

這個過程對用戶是透明的,用戶并不會知道這個過程的發(fā)生,看起來如同1的執(zhí)行順序,不同的是如果保存有系統(tǒng)被清除出內(nèi)出時的信息,會在調(diào)用onCreate()時,系統(tǒng)以參數(shù)的形式給出,而1中onCreate()的參數(shù)為null。

四、下面闡述幾種比較常見的情況:

(1) 單個A Activity啟動回調(diào)流程

onCreate

onStart

onResume

(2) 當用戶按下home鍵時

onPause

onStop

(3) 當用戶再次回到原Activity時

onRestart

onStart

onResume

(4) 在A Activity的基礎上,打開新的B Activity,此時需要注意的問題是B Activity的大小和透明度

a. B Activity完全覆蓋A Activity,并且B Activity是不透明的:

A Activity: onPause

B Activity: onCreate --> on Start --> onResume

A Activity : onStop

b. B Activity因為尺寸小沒有完全覆蓋A Activity,或者B Activity是透明的, 此時A Activity的onStop方法是不會被執(zhí)行的

A Activity: onPause

B Activity: onCreate --> on Start --> onResume

(5) 當用戶按back鍵時

onPause

onStop

onDestory

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

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

  • 啟動與銷毀Activity 不同于使用 main() 方法啟動應用的其他編程范例,Android 系統(tǒng)會通過調(diào)用對...
    安卓Boy閱讀 1,877評論 3 5
  • Activity作為四大組件之一,是使用頻率最高的組件,也是直接為用戶提供主體的操作主件,基本上我們在Androi...
    倚欄靜望閱讀 684評論 0 0
  • 悵懷多是傷離別,遙盼處、斷云疊。 夜露秋高易水寒,玉欄空零葉。 冷煙郁霧愁眉睫,孽海風流夢蝴蝶。 十二巫山隔簾紗,...
    劉小地閱讀 384評論 30 69
  • 白衣掛影清霜淡 玉冠幽空紫月彌 銹劍藏鋒老驥寐 寒眸斷岳青筋旳
    茗香酒影閱讀 193評論 3 1
  • 觸發(fā): 屬性觸發(fā) A 參數(shù): ngUrl 后臺請求地址ngData 表單數(shù)據(jù)ngKey 主鍵,用于判斷為新增...
    歲月靜好?閱讀 240評論 0 0

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