Android進階(一) Activity 的生命周期詳解

接觸Android已經有兩年了,總感覺自己停留在某個階段已經很久了,應該會有好多人和我有相同的感覺吧,是時候去吸收一波知識了,任玉剛大神的《Android 開發藝術探索》是一本非常不錯的進階書籍(推薦大家買來拜讀一下)。這是我第二遍去看這本書了,第一次是我剛剛開始實習,好多知識都是迷迷糊糊的看過了,經過一年的學習和工作,第二次有了不同的體驗!拿出來和大家一起共享和學習。

隨后會根據《Android開發藝術探索》這本書的學習過程推出《Android 進階》系列博客,希望大家多多支持?。。?br> 第一篇也是開篇毫不猶豫的會介紹我們的老朋友Activity,他的重要性就不用過多的闡述了,有關Activity的知識點也比較多,我們就跟著大神的腳步,從Activity的生命周期開始我們的《Android 進階》系列。

Activity 的生命周期主要分為兩種情況,一種是正常情況下的生命周期,一種是異常情況下的生命周期。所謂正常情況下的生命周期是指在沒有系統干預情況下的生命周期,而異常情況下的生命周期則是指在有系統干預情況下Activity的生命周期,這里的有系統干預指的是由于內存不足Activity被系統回收,或者當前設備的Configuration發生改變從而導致Activity的生命周期發生變化。
(一)正常情況下的生命周期
首先來一張官網對于Activity生命周期的概括圖

Activity生命周期圖

從上圖中我們可以看出正常情況下Activity從開始創建到被銷毀會依次經歷onCreate(),onStart(),onResume(),onPause(),onStop(),onDestory()方法。
(1) onCreate() :生命周期的第一個方法,此方法執行表示Activity正在被創建,在這個方法中我們通常會進行加載頁面布局,初始化數據等操作。
(2) onStart():表示Activity正在被啟動,此時的Activity已經是可見的,但是用戶還是無法看到的,此時的Activity還在后臺,無法與用戶進行交互。
(3) onResume():表示Activity已經可見了,而且Activity從后臺出現在了前臺,可以與用戶進行交互了。與onStart的區別就是雖然都表示Activity已經可見了,但是onStart的時候Activity是在后臺的,用戶無法看到,也無法進行任何的操作,但是onResume()執行的時候Activity已經轉到了前臺,可以與用戶進行相應的操作。
(4) onPause():表示Activity正在停止,按照大神的理解,正常情況下onPause()執行完后會立即執行onStop方法,但在特殊情況下,如果在onPause執行后快速的回到當前的Activity,那么onResume()會被調用(這屬于一種極端的情況,用戶很難重現)。在這個方法中可以做一些數據的存儲,內存的釋放等工作,但是不能執行耗時的操作,因為onPause()必須完全執行完,新的Activity才會被創建。
(5) onStop():表示Activity即將停止,可以做一些稍微重量級的工作,但是依然不能太耗時。
(6) onDestory():表示Activity即將銷毀,這是生命周期中的最后一個方法,可以做最后的資源釋放。

(二)異常情況下的生命周期
異常情況下的生命周期主要指的是資源相關的系統配置發生改變導致Activity被殺死并重建以及內存系統不足時Activity可能被殺死兩種情況。接下來我們分別做詳細的介紹。
(1) 要理解這個問題,就要對系統的資源加載機制有所了解,舉個簡單的例子,如果我們不做處理,默認情況下,如果手機進行橫豎屏切換的操作,當前的Activity就會被銷毀和重建(我們也可以阻止系統重新創建我們的Activity)。
當系統配置發生改變后,Activity會被銷毀,其onPause,onStop,onDestory均會被調用,同時由于Activity是在異常情況下終止的,系統會調用onSaveInstanceState()方法來保存當前Activity的狀態,這個方法是在onStop()之前調用的,但是和onPause()方法是沒有前后調用關系的,可能在onPause()之前調用,也可能在onPause()之后調用。當Activity被重新創建后,系統會調用onRestoreInstanceState(),并且把onSaveInstance()方法所保存的Bundle對象作為參數傳遞給onRestoreInstanceState()方法和onCreate()方法。

(2) 系統內存資源不足導致低優先級的Activity被殺死
內存不足的情況下Activity的生命周期和(1)的情況是一致的。這里主要介紹一下Activity的優先級情況
1.前臺Activity:也就是正在與用戶進行交互的Activity,系統會優先保護該類Activity,它的優先級也是最高的。
2.可見但非前臺的Activity:比如Activity跳轉到一個透明的Activity,原Activity雖然是可見的,但是無法和用戶進行交互。
3.后臺Activity:優先級最低。
當系統內存不足時,系統就會按照上述的優先級去清理Activity所在的進程。
Activity的生命周期就介紹到這里,最后一句名人名言送給大家:
生活賦予我們一種巨大的和無限高貴的禮品,這就是青春:充滿著力量,充滿著期待志愿,充滿著求知和斗爭的志向,充滿著希望信心和青春。 —— 奧斯特洛夫斯基

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

推薦閱讀更多精彩內容