安卓:活動的生命周期

安卓:活動的生命周期

在安卓中, 活動的生命周期可以歸納為: 1條棧、4種狀態、7個狀態轉化回調函數。

作者?Bryce Chen

0x00 返回棧

0x01 活動狀態

0x02 狀態轉換的回調函數

0x03 例子


0x00 返回棧

棧是一種后進先出的數據結構,每當我們啟動了一個新的活動,它會在返回棧中入棧,并處于棧頂的位置。自然地,原先處于棧頂的活動會被新的活動”壓住”。

而每當我們按下Back鍵或調用finish()方法去銷毀一個活動時,處于棧頂的活動會出棧,這時前一個入棧的活動就會重新登頂。

處于棧頂的活動會被顯示給用戶,提供可交互的操作狀態。


新的活動將壓入返回棧



0x01 活動狀態

1.運行狀態

處于運行狀態的活動,是擺在用戶面前的活動。此時這個活動處于可交互的狀態,能夠響應用戶的觸摸操作。這時,活動在返回棧的位置就是棧頂。

2.暫停狀態

用戶可見的、卻不可交互的活動,就處于暫停狀態。例如此時的棧頂是一個對話框形式的活動,由于它只會占用屏幕中間的部分區域,所以底下那個活動就是可見的。此時的活動是不可交互的,換言之,對用戶的觸摸點擊"沒有反應”。此時,活動不在棧頂了。

3.停止狀態

用戶對活動完全不可見的時候,活動就進入了停止狀態。活動需由暫停狀態進入停止狀態。很多時候是新的活動完全覆蓋了原活動,用戶感覺到了”頁面的切換",那么該活動從運行態,中間暫停態幾乎不停留,進入到停止態。

4.銷毀狀態

當一個活動從返回棧中移除后就變成了銷毀狀態。

?
4種轉態和7個狀態轉化回調函數


0x02 狀態轉換的回調函數

1.onCreate()

這個函數在活動第一次被創建的時候調用。一般在這個方法中完成活動的初始化操作,比如說加載布局、綁定事件等。

2.onStart()

這個方法在活動新創建,第一次由不可見變為可見的時候調用,活動被啟動了。

3.onRestart()

這個方法在活動由不可見變為可見的時候調用,也就是停止狀態變為運行狀態之前調用,即活動被重新啟動了。

4.onResume()

這個方法在活動準備好和用戶進行交互的時候調用。此時的活動位于返回棧的棧頂,并且處于運行狀態

5. onPause()

這個方法在活動進入不可交互的狀態的時候調用,活動由運行狀態進入暫停狀態。

6.onStop()

這個方法在活動完全不可見的時候調用,活動由暫停狀態進入停止狀態。

7.onDestroy()

這個方法在活動被銷毀之前調用,之后活動的狀態將變為銷毀狀態。


0x03 例子

在Android Studio中新建工程

新建MainActivity,改寫以上7個回調方法,分別在其中加入Log,觀察函數的調用:


改寫7個回調方法

啟動應用

在控制臺的Logcat中看到,依次調用了onCreate()、onStart()、onResume() :

程序調用onCreate()的時間是 02:17:53.313,也就是進入停止狀態的時間點。

可以看到依次調用的時間間隔非常短,僅為幾毫秒,該活動在中間狀態(停止狀態 2ms、暫停狀態 6ms)幾乎沒有停留的時間,直奔運行狀態。


Log 輸出

退出應用

點擊Back返回鍵:


模擬器

查看Log

接著,依次調用了onPause()、onStop()、onDestroy():

程序調用onPause()的時間是 02:32:57.030,也就是進入暫停狀態的時間點。

活動從運行狀態,在中間狀態 (暫停狀態1020 ms、停止狀態不足1 ms)的停留時間不長,很快進入了銷毀狀態。

Log 輸出


參考文獻:《第一行代碼》(郭霖)?

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • Android的活動是層疊的,每啟動一個新的活動,就會覆蓋在原活動之上(類似于iOS的push,后進先出),按下B...
    心里的另一個你閱讀 1,179評論 0 1
  • 最近學習android中關于Activity的生命周期方面,對于有些方面有所理解,希望寫下來記錄,方便以后查看,順...
    XunselF閱讀 849評論 0 1
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 173,556評論 25 708
  • 我正玩的不亦樂乎。突然有一聲廣播說讓我們去造浪池因為大浪馬上就要來了。我好激動呀!于是我馬上拿著鞋帶著游泳...
    張宇涵小朋友閱讀 208評論 0 1
  • 百家血,千里情,萬般冷風卻撞東頭嶺。 -01- 村子不大不小,住著七十多戶人家。 村東頭荒荒的,早晚無鳥鳴,只劉二...
    亦行_閱讀 421評論 2 7