標籤:des style blog http color ar strong 資料 sp
一、Activity基本概念
Activity是安卓開發中的重要組件,它為使用者提供了基本的螢幕互動空間。簡單來說,我們直觀看到的應用可操作介面,其基礎就是託管的activity。
一個應用通常由多個activity組成,一個activity可以啟動另外一個acitvity,新的activity稱為子activity,其父activity將會自動停止,並被壓入stack,當子activity返回時,再從stack中彈出父activity。
二、Activity的生命週期
安卓官方文檔有句話:開發一個強大和靈活的應用程式,實現Activity的回調方法來管理其生命週期尤為重要。
所以,弄清楚Acitvity的整個生命週期,是後期開發複雜應用的基礎。
1.生命週期的控制
Activity完整的生命週期為從onCreate()到onDestroy()之間的所有過程,如:
Activity的生命週期主要由安卓系統託管。開發人員能控制的一般只有start(startActivity())與shut down(finish())Activity。
而其他的onXXX()方法,均是由安卓系統根據不同的外部狀況來進行調用,開發人員不能直接參与控制。
也就是說,開發人員並不能控制生命週期的轉換,但是,我們可以通過回調方法onXXX()來控制應用在各個生命週期的表現。
所以,開發人員需要瞭解:
- 生命週期在何時會發生變化
- 發生變化時,我們能夠幹什麼
2.生命週期在何時會發生變化 以及 我們能做什麼
- activity的完整生命週期在onCreate()和onDestroy()調用之間發生。你的activity應該在 onCreate() 方法裡完成所有“全域global”狀態的設定(比如定義layout), 而在onDestroy() 方法裡釋放所有佔用的資源。 例如,如果你的activity有一個後台啟動並執行線程,用於從網路下載資料,那麼你應該在 onCreate() 方法裡建立這個線程並且在 onDestroy() 方法裡停止這個線程。
- activity的可見生存期會在 onStart() 調用和 onStop() 調用之間發生。在這期間,使用者可在螢幕上看見這個activity並可與之互動。 例如,當一個新的activity啟動後調用了 onStop() 方法,則這個activity就無法被看見了。 在這兩個方法之間,你可以管理那些顯示activity所需的資源。例如,你可以在 onStart() 方法裡註冊一個 BroadcastReceiver 用於監控影響使用者介面的改動。並且當使用者不再看到你的顯示內容時,在 onStop() 方法裡登出掉它。 系統會在activity的整個生存期內多次調用 onStart() 和onStop(), 因為activity可能會在顯示和隱藏之間不斷地來回切換。
- activity的前台生存期會在 onResume() 調用和 onPause() 之間發生。在這期間,activity是位於螢幕上所有其它的activity之前,並且擁有使用者的輸入焦點。 activity可以頻繁地進入和退出前台——例如, 當裝置進入休眠時或者彈出一個對話方塊時, onPause() 就會被調用。因為這個狀態可能會經常發生轉換,為了避免切換遲緩引起的使用者等待,這兩個方法中的代碼應該相當地輕量化。
可見生存期和前台生存期似乎有點讓人迷惑,具體是這樣的:
activity可能處於三種基本的狀態:
-
Resumed
-
activity在螢幕的前台並且擁有使用者的焦點。(這個狀態有時也被叫做“running”。)
-
Paused
-
另一個activity在前台並擁有焦點,但是本activity還是可見的。 也就是說,另外一個activity覆蓋在本activity的上面,並且那個activity是部分透明的或沒有覆蓋整個螢幕。 一個paused的activity是完全存活的(Activity 對象仍然保留在記憶體裡,它保持著所有的狀態和成員資訊,並且保持與window manager的聯結),但在系統記憶體嚴重不足的情況下它能被殺死。
-
Stopped
-
本activity被其它的activity完全遮擋住了(本activity目前在後台)。 一個stopped的activity也仍然是存活的(Activity 對象仍然保留在記憶體中,它保持著所有的狀態和成員資訊,但是不再與window manager聯結了)。 但是,對於使用者而言它已經不再可見了,並且當其它地方需要記憶體時它將會被殺死。
如果activity被paused或stopped了,則系統可以從記憶體中刪除它,通過請求finish(調用它的 finish() 方法)或者直接殺死它的進程。 當這個activity被再次啟動時(在被finish或者kill後),它必須被完全重建。
安卓開發入門筆記#1 初認Activity