Android之Activity生命周期及啟動模式


Activity 生命周期



是Android程序與用戶交互的窗口,從視覺效果來看,一個Activity占據當前的窗口,響應所有窗口事件,具備有控件,菜單等界面元素。從內部邏輯來看,Activity需要為了保持各個界面狀態,需要做很多持久化的事情,還需要妥善管理生命周期,和一些轉跳邏輯。

(1)一個Activity通常就是一個單獨的屏幕(窗口)。

(2)Activity之間通過Intent進行通信。

(3) Android應用中每一個Activity都必須要在AndroidManifest.xml配置文件中聲明,否則系統將不識別也不執行該Activity。


Activity 生命周期應用

onCreate :全局變量的初始化、layout加載

當活動第一次啟動的時候,觸發該方法,可以在此時完成活動的初始化工作。onCreate 方法有一個參數,該參數可以為空(null),也可以是之前調用 onSaveInstanceState() 方法保存的狀態信息。

onStart :注冊廣播

該方法的觸發表示所屬活動將被展現給用戶。

onResume :生命優先級最高

當一個活動和用戶發生交互的時候,觸發該方法。

onPause :可以保存一些數據

當一個正在前台運行的活動因為其他的活動需要前台運行而轉入后台運行的時候,觸發該方法。這時候需要將活動的狀態持久化,比如正在編輯的數據庫記錄等。

onStop :可做輕量級的耗時操作,保存數據

當一個活動不再需要展示給用戶的時候,觸發該方法。如果內存緊張,系統會直接結束這個活動,而不會觸發 onStop 方法。所以保存狀態信息是應該在onPause時做,而不是onStop時做。活動如果沒有在前台運行,都將被停止或者Linux管理進程為了給新的活動預留足夠的存儲空間而隨時結束這些活動。因此對於開發者來說,在設計應用程序的時候,必須時刻牢記這一原則。在一些情況下,onPause方法或許是活動觸發的最后的方法,因此開發者需要在這個時候保存需要保存的信息。

onRestart :

當處於停止狀態的活動需要再次展現給用戶的時候,觸發該方法。

onDestroy :釋放資源、全局變量置空

當活動銷毀的時候,觸發該方法。和 onStop 方法一樣,如果內存緊張,系統會直接結束這個活動而不會觸發該方法。


Activity 啟動順序

啟動一個Activity時:

onCreate()——>onStart()——>onResume()

另一個Activity啟動時:

第一個Activity onPause()——> 第二個Activity  onCreate()——>onStart()——>onResume() ——> 第一個Activity   onStop()

返回到第一個Activity時:

第二個Activity onPause() ——> 第一個Activity  onRestart()——>onStart()——>onResume() ——> 第二個Activity   onStop()——>onDestroy()


Activity 現場保護

在Activity發生異常的情況才能調用,例如橫豎屏切換
onSaveInstanceState 在onPause方法之后調用,我們可以進行數據的保存
onRestoreInstanceState 在重啟后onStart方法進行調用,我們可以拿出保留的數據


在清單文件中配置,當切換橫豎屏時候不進行 生命周期切換

控制切換橫豎屏,生命周期不切換,可以指定Activity
android:configChanges="orientation | screenSize | keyboardHidden"
控制屏幕初始化顯示方向
android:screenOrientation="landscape"
landscape  風景畫     橫屏
portrait       肖像         豎屏


Activity 四種啟動模式

standard
默認的配置方式,啟動配置了該啟動模式的界面時,會立即創建一個全新的Activity對象,置於Back Stack的棧頂

singleTop
啟動配置了該啟動模式的界面時,會去Back Stack的棧頂查看同類型的界面實例是否存在,若存在,就復用;若不存在,就創建新的界面實例置於回退棧的棧頂。(保證棧頂實例的唯一性)

singleTask

啟動配置了該啟動模式的界面時,會遍歷整個BackStack,查看同類型的界面實例是否存在,若不存在,就構建全新的界面實例置於棧頂;
若存在:
    情形1:在棧頂,直接復用。
    情形2:不在棧頂,會清除該界面實例之上所有的界面對象,達到將當前界面實例置於棧頂的目的

singleInstance
啟動配置了該啟動模式的界面時,會將該Activity界面實例單獨置於一個全新的Back Stack中,而且,該回退棧中只保存一個界面實例。此時,若配置了別的啟動模式的界面跳轉到該界面后,會將存儲該界面的Back Stack置於前面,用戶就看到了該界面的樣子;若該界面啟動了別的界面,那么,別的界面所在的回退棧就會置於該界面所在回退棧之前,並且,從別的回退棧中拿出一個界面呈現在用戶眼前。(一句話:眼見所看到到永遠是某個置於最前方回退棧棧頂的界面實例)




注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2021 ITdaan.com