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