楊碎明 孫文高
理解Android的活動(dòng)(Activity)生命周期是對(duì)一個(gè)智能機(jī)開(kāi)發(fā)人員工非常重要的。 只有這樣,才能確保對(duì)一個(gè)邏輯的用戶的應(yīng)用程序有效管理其資源。Android中的應(yīng)用程序(app)并不能管理自已的生命周期,而是由系統(tǒng)進(jìn)行統(tǒng)一的管理。
1引言
在現(xiàn)實(shí)生活中,經(jīng)常會(huì)用手機(jī)打電話,發(fā)短信,玩游戲等,這就需要與手機(jī)界面進(jìn)行交互,用戶與程序的交互是能通過(guò)Activity完成的,活動(dòng)就是Android程序的表現(xiàn)層,展示可視化的用戶界面,并接收與用戶交互所產(chǎn)生的界面事件活動(dòng)。 活動(dòng)可表現(xiàn)以下四個(gè)狀態(tài): 分別是運(yùn)行 (Running)狀態(tài)、暫停(paused)狀態(tài)、停止(Stopped)狀態(tài)和銷(xiāo)毀(Destroyed)狀態(tài)。 活動(dòng)的生命周期就是它所在進(jìn)程的生命周期。 分為三類(lèi):可視生命周期,前臺(tái)生命周期、和完整生命周期。
2活動(dòng)交互機(jī)制
2.1 活動(dòng)的四個(gè)狀態(tài)
1)當(dāng)用戶界面在它在屏幕前臺(tái)時(shí),它是激活或運(yùn)行狀態(tài)。 它就是響應(yīng)用戶操作的Activity。
2)當(dāng)一個(gè)界面上面有另外一個(gè)Activity,使它失去了焦點(diǎn)但仍然對(duì)用戶可視時(shí),這個(gè)界面實(shí)質(zhì)上處于暫停狀態(tài)。在它之上的Activity如果沒(méi)有完全遮蓋整個(gè)手機(jī)屏幕,或者是透明的,被暫停的Activity仍然對(duì)用戶可見(jiàn),并且是存活狀態(tài)。
3)當(dāng)它完全被另一個(gè)Activity覆蓋時(shí)則處于停止?fàn)顟B(tài)。它仍然保留所有的狀態(tài)和成員信息,然而對(duì)用戶是不可見(jiàn)的。所以它的窗口將被隱藏,如果其它地方需要內(nèi)存,則系統(tǒng)經(jīng)常會(huì)殺死這個(gè)Activity。
4)銷(xiāo)毀狀態(tài),不在以上三個(gè)狀態(tài)中的活動(dòng),如活動(dòng)已被回收或啟動(dòng)。
3 Activity生命周期
3.1 活動(dòng)的生命周期
因?yàn)榛顒?dòng)直接涉及與用戶交互界面的處理,而任意時(shí)刻與用戶交互的界面只有一個(gè),所以Android針對(duì)活動(dòng)的管理采用了具有層次感的棧數(shù)據(jù)結(jié)構(gòu)?;顒?dòng)棧保存了已經(jīng)啟動(dòng)并且沒(méi)有終止的活動(dòng),并遵循“先進(jìn)后出”的原則。例如,在某個(gè)時(shí)刻只有一個(gè)活動(dòng)處于棧頂,當(dāng)這個(gè)活動(dòng)被銷(xiāo)毀后,下面的活動(dòng)才可能處于棧頂,或者是有一個(gè)新的活動(dòng)被創(chuàng)建出來(lái),則上一個(gè)活動(dòng)就被壓下去。
1)Activity的完整生命周期從首次調(diào)用onCreate()這個(gè)方法開(kāi)始,最后調(diào)用onDestroy()這個(gè)方法結(jié)束。在Activity生命周期中,用onCreate()中設(shè)置所有“全局”狀態(tài)以完成初始化,而在onDestroy()中釋放所有系統(tǒng)資源。
2)Activity的可視生命周期從調(diào)用onStart()方法開(kāi)始,最后調(diào)用的onStop()結(jié)束。在這個(gè)過(guò)程中,,用戶可以在屏幕上看到Activity活動(dòng), 雖然有時(shí)它不和用戶交互,也許它位于后臺(tái) 3)Activity的前臺(tái)生命周期從調(diào)用onResume()開(kāi)始,最后調(diào)用相應(yīng)的onPause()為結(jié)束。在這個(gè)過(guò)程中,Activity位于前臺(tái)最上面并與用戶進(jìn)行交互, 傳遞消息。Activity會(huì)經(jīng)常在暫停和恢復(fù)之間進(jìn)行狀態(tài)轉(zhuǎn)換——例如當(dāng)設(shè)備轉(zhuǎn)入休眠狀態(tài)或者有新的Activity啟動(dòng)時(shí),將調(diào)用onPause() 方法。當(dāng)Activity獲得結(jié)果或者接收到新的Intent時(shí)會(huì)調(diào)用onResume() 方法。
4)Activity的onSaveInstanceState()和 onRestoreInstance
State()方法
Activity的 onSaveInstanceState() 和 onRestoreInstance
State()這兩兩個(gè)方法并不是生命周期方法,它們與 onCreate()、onPause()等生命周期方法有本質(zhì)的區(qū)別,它們常常并不會(huì)被調(diào)用,而當(dāng)發(fā)生意外時(shí)才觸發(fā)。如當(dāng)應(yīng)用遇到意外情況,由系統(tǒng)銷(xiāo)毀一個(gè)Activity時(shí),onSaveInstanceState()才會(huì)被調(diào)用。但是當(dāng)用戶有意去銷(xiāo)毀一個(gè)Activity時(shí),例如在應(yīng)用中按返回鍵,onSaveInstanceState()就不會(huì)被調(diào)用。在這種情況下因?yàn)橛脩舻男袨闆Q定了,不需要保存Activity的狀態(tài)。通常onSaveInstanceState()只適合用于保存一些 暫時(shí)性的狀態(tài),而onPause()適合用于數(shù)據(jù)的永久保存。
Activity生命周期一般分為四個(gè)基本狀態(tài),分別是活動(dòng)狀態(tài)(running),暫停狀態(tài)(paused),停止?fàn)顟B(tài)(stopped)和死亡狀態(tài)。 Activity七大生命周期函數(shù), Activity一共有七個(gè)生命周期函數(shù),分別為 onCreate(), onRestart(), onStart(), onReusme(), onPause(), onStop(), onDestory()。其實(shí)在一個(gè)Activity整個(gè)生命周期中上述七大生命周期并不是一定都會(huì)被執(zhí)行的,有時(shí)由于系統(tǒng)內(nèi)存不足的緣故,部分生命周期函數(shù)將會(huì)被跳過(guò)不執(zhí)行。
(作者單位:西安交通工程學(xué)院)