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