Activity的生命週期以及四種形態

1 Activity 是與用戶交互的第一接口, 通過setContentView(View)方法來給該Activity指定一個顯示界面, 並以此爲基礎提供給用戶交互接口. 另外 系統是採用Activity棧來管理Activity的.
2 四種形態

  • Runing/Active
    此時Activity 處在Activity棧的最頂層, 處於屏幕最前方,可與用戶進行交互 .此時處於運行狀態;
  • Paused
    Activity失去了焦點, 被一個新的非全屏的Activity 或者一個透明的Activity放置在棧頂時,該Activity轉化爲Pasued形態, 不可與用戶交互, 但是所有的信息,變量都還保持着, 當系統內存極低的情況下 ,纔會被系統回收.此時處於暫停狀態;
  • Stopped
    該Activity完全被另一個Activity覆蓋,該Activity轉化爲Stopped形態,此時它不可見,但是信息,變量都還保持着,此時處於停止狀態;
  • Killed
    當Activity被系統回收,或者從來沒有創建過,Activity處於Killed形態,此時處於銷燬狀態;
    結論: Activity對於開發者來說,可以控制它的”生”,但是不能控制它的”死”

3 Activity生命週期
Activity生命週期的流程圖
這裏寫圖片描述

Activity只有三個穩定的生命週期狀態,其他狀態都是過度狀態,很快會結束.

. Resumed
這個狀態就是Activity的Running狀態
. Paused
當Activity一部分被擋住,就會進入這個狀態,不接受用戶輸入
. Stopped
當Activity完全被覆蓋,就會進入這個狀態,僅在後臺運行
分析圖中的數字標註

1) 該Activity的運行時期,與用戶可交互,在棧的最頂端.
2) 其他的Activity覆蓋或者一部分覆蓋,都會使得當前Activity回調onPasue方法,釋放系統資源,比如 sensor, Camera,receiver等等.Activity部分不可見的時候,有兩個情況,從部分不可見到可見,既用戶return到該Activity時,也就是圖中標註5的情況,此時該Activity會重新回到onResume的可見可交互的狀態;另一種情況是從部分不可見到完全不可見,也就是圖中標註3的情況,此時該Activity會進入onStop狀態
3) 該Activity處於onStop狀態時,有三種後續可能,

  • 當用戶根據導航操作再次回到該Activity的時候,會經過onReStart()–>onStart()–>onResume()使得用戶重新可見該Activity;
  • 按返回鍵等操作主動finish該Activity或者系統內存極爲緊張時需要回收該Activity的時候,該Activity進入到onDestroy的銷燬狀態,也就是圖中標註的4情況;
  • 系統需要更多的空間用於其他application時,系統會回收當前的Activity,如圖中標註的7,8情況.這個時候,用戶只能按照導航操作經過onCreate()重新進入一個新的Activity界面

注: 如果是當前Activity彈出的dialog則不會執行Activity任何生命週期中的方法,只有其它Activity彈出了Dialog或者攔住了當前的Activity纔會執行onPause()
重點內容
4 關於onSaveInstanceState()方法

當系統回收Activity的時候,會將它的狀態通過onSaveInstanceState()方法保存到Bundle對象中,也可以增加額外的鍵值存入Bundle對象中以保存Activity的狀態.當重新創建Activity的時候,保存的Bundle對象就會傳遞給Activity的onSaveInstanceState()方法或者onCreate()方法中.
注:如果用戶使用了finish()方法結束Activity時,就不會調用onSaveInstanceState()方法.而且Android系統已經默認實現了控件的狀態緩存,不需要開發者來實現緩存邏輯.

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章