不同于其他編程范式(程序從main()方法開(kāi)始啟動(dòng))属提,Android系統(tǒng)根據(jù)生命周期的不同階段喚起對(duì)應(yīng)的回調(diào)函數(shù)來(lái)執(zhí)行代碼。系統(tǒng)存在啟動(dòng)與銷毀一個(gè)activity的一套有序的回調(diào)函數(shù)档叔。
理解生命周期的回調(diào)
Resumed:該狀態(tài)下,activity處在前臺(tái)痪伦,用戶可以與它進(jìn)行交互残制。(通常也被理解為"running" 狀態(tài))
Paused:該狀態(tài)下,activity的部分被另外一個(gè)activity所遮蓋:另外的activity來(lái)到前臺(tái)斩狱,但是半透明的耳高,不會(huì)覆蓋整個(gè)屏幕。被暫停的activity不再接受用戶的輸入且不再執(zhí)行任何代碼所踊。
Stopped:該狀態(tài)下, activity完全被隱藏泌枪,對(duì)用戶不可見(jiàn)★醯海可以認(rèn)為是在后臺(tái)碌燕。當(dāng)stopped, activity實(shí)例與它的所有狀態(tài)信息(如成員變量等)都會(huì)被保留,但activity不能執(zhí)行任何代碼继薛。
其它狀態(tài) (Created與Started)都是短暫的修壕,系統(tǒng)快速的執(zhí)行那些回調(diào)函數(shù)并通過(guò)執(zhí)行下一階段的回調(diào)函數(shù)移動(dòng)到下一個(gè)狀態(tài)。也就是說(shuō)遏考,在系統(tǒng)調(diào)用onCreate(), 之后會(huì)迅速調(diào)用onStart(), 之后再迅速執(zhí)行onResume()慈鸠。以上就是基本的activity生命周期。
指定程序首次啟動(dòng)的Activity
當(dāng)用戶從主界面點(diǎn)擊程序圖標(biāo)時(shí)灌具,系統(tǒng)會(huì)調(diào)用app中被聲明為"launcher" (or "main") activity中的onCreate()方法青团。這個(gè)Activity被用來(lái)當(dāng)作程序的主要進(jìn)入點(diǎn)像棘。
創(chuàng)建一個(gè)新的實(shí)例
我們必須實(shí)現(xiàn)onCreate()方法來(lái)執(zhí)行程序啟動(dòng)所需要的基本邏輯。例如可以在onCreate()方法中定義UI以及實(shí)例化類成員變量壶冒。(onCreate里面盡量少做事情缕题,避免程序啟動(dòng)太久都看不到界面)
Note:onCreate() 方法包含了一個(gè)參數(shù)叫做savedInstanceState,這將會(huì)在后面的課程 -重新創(chuàng)建activity涉及到胖腾。
銷毀Activity
大多數(shù) app并不需要實(shí)現(xiàn)這個(gè)方法烟零,因?yàn)榫植款惖膔eferences會(huì)隨著activity的銷毀而銷毀,并且我們的activity應(yīng)該在onPause()與onStop()中執(zhí)行清除activity資源的操作咸作。然而锨阿,如果activity含有在onCreate調(diào)用時(shí)創(chuàng)建的后臺(tái)線程,或者是其他有可能導(dǎo)致內(nèi)存泄漏的資源记罚,則應(yīng)該在OnDestroy()時(shí)進(jìn)行資源清理墅诡,殺死后臺(tái)線程。
Note:除非程序在onCreate()方法里面就調(diào)用了finish()方法桐智,系統(tǒng)通常是在執(zhí)行了onPause()與onStop() 之后再調(diào)用onDestroy() 末早。在某些情況下,例如我們的activity只是做了一個(gè)臨時(shí)的邏輯跳轉(zhuǎn)的功能说庭,它只是用來(lái)決定跳轉(zhuǎn)到哪一個(gè)activity然磷,這樣的話,需要在onCreate里面調(diào)用finish方法刊驴,這樣系統(tǒng)會(huì)直接調(diào)用onDestory姿搜,跳過(guò)生命周期中的其他方法。
源地址:http://wiki.jikexueyuan.com/project/android-training-geek/starting.html