安卓:活動的生命周期
在安卓中, 活動的生命周期可以歸納為: 1條棧、4種狀態、7個狀態轉化回調函數。
作者?Bryce Chen
0x00 返回棧
0x01 活動狀態
0x02 狀態轉換的回調函數
0x03 例子
0x00 返回棧
棧是一種后進先出的數據結構,每當我們啟動了一個新的活動,它會在返回棧中入棧,并處于棧頂的位置。自然地,原先處于棧頂的活動會被新的活動”壓住”。
而每當我們按下Back鍵或調用finish()方法去銷毀一個活動時,處于棧頂的活動會出棧,這時前一個入棧的活動就會重新登頂。
處于棧頂的活動會被顯示給用戶,提供可交互的操作狀態。
0x01 活動狀態
1.運行狀態
處于運行狀態的活動,是擺在用戶面前的活動。此時這個活動處于可交互的狀態,能夠響應用戶的觸摸操作。這時,活動在返回棧的位置就是棧頂。
2.暫停狀態
用戶可見的、卻不可交互的活動,就處于暫停狀態。例如此時的棧頂是一個對話框形式的活動,由于它只會占用屏幕中間的部分區域,所以底下那個活動就是可見的。此時的活動是不可交互的,換言之,對用戶的觸摸點擊"沒有反應”。此時,活動不在棧頂了。
3.停止狀態
用戶對活動完全不可見的時候,活動就進入了停止狀態。活動需由暫停狀態進入停止狀態。很多時候是新的活動完全覆蓋了原活動,用戶感覺到了”頁面的切換",那么該活動從運行態,中間暫停態幾乎不停留,進入到停止態。
4.銷毀狀態
當一個活動從返回棧中移除后就變成了銷毀狀態。
0x02 狀態轉換的回調函數
1.onCreate()
這個函數在活動第一次被創建的時候調用。一般在這個方法中完成活動的初始化操作,比如說加載布局、綁定事件等。
2.onStart()
這個方法在活動新創建,第一次由不可見變為可見的時候調用,活動被啟動了。
3.onRestart()
這個方法在活動由不可見變為可見的時候調用,也就是停止狀態變為運行狀態之前調用,即活動被重新啟動了。
4.onResume()
這個方法在活動準備好和用戶進行交互的時候調用。此時的活動位于返回棧的棧頂,并且處于運行狀態
5. onPause()
這個方法在活動進入不可交互的狀態的時候調用,活動由運行狀態進入暫停狀態。
6.onStop()
這個方法在活動完全不可見的時候調用,活動由暫停狀態進入停止狀態。
7.onDestroy()
這個方法在活動被銷毀之前調用,之后活動的狀態將變為銷毀狀態。
0x03 例子
在Android Studio中新建工程
新建MainActivity,改寫以上7個回調方法,分別在其中加入Log,觀察函數的調用:
啟動應用
在控制臺的Logcat中看到,依次調用了onCreate()、onStart()、onResume() :
程序調用onCreate()的時間是 02:17:53.313,也就是進入停止狀態的時間點。
可以看到依次調用的時間間隔非常短,僅為幾毫秒,該活動在中間狀態(停止狀態 2ms、暫停狀態 6ms)幾乎沒有停留的時間,直奔運行狀態。
退出應用
點擊Back返回鍵:
查看Log
接著,依次調用了onPause()、onStop()、onDestroy():
程序調用onPause()的時間是 02:32:57.030,也就是進入暫停狀態的時間點。
活動從運行狀態,在中間狀態 (暫停狀態1020 ms、停止狀態不足1 ms)的停留時間不長,很快進入了銷毀狀態。
參考文獻:《第一行代碼》(郭霖)?