Activity是一個能夠提供用戶一個屏幕讓用戶能夠來作某些交互的應用組件,好比撥打電話,拍照,發email或者查看地圖。每一個activity會給出一個窗口來繪製用戶界面。這個窗口一般會填滿整個屏幕,但有時也會比屏幕小點而且浮動在其餘屏幕的頂端。android
1. Activity棧, 在Activity中能夠啓動新的Activity, 當新的Activity啓動後, 前一Activity被中止, 並保存在Activity棧。當前Activity被壓入棧頂。ide
2. 建立Activity。須要繼承Activity, 並實現一系列的回調方法。兩個重要的方法是佈局
a.
onCreate(), 當系統建立當前Activity時會調用這個方法,在你的實現中,你應該初始化一些你的Activity的必要組件, 最重要的是,你必須調用setContentView()來來指定你的Activity的用戶界面佈局。
b.
onPause(), 系統會在用戶要離開(並不必定老是destroy)Activity的第一意向是調用這個方法。一般這是咱們須要提交一些用戶會話中須要保存的改變(由於用戶可能不再會回來)的時機; 這個方法是最後一個能夠保證在進程被kill 以前調用,所以須要在這個方法裏面存儲相當重要的數據,並且這些操做必須是輕量級的, 否則會阻塞下一個Activity的轉換進而影響用戶的體驗。
3. 幾個Activity的子類:orm
a.
ListActivity:含有ListView的Activity
b.
TabActivity:提供支持用戶Tab切換的Activity
c.
PreferenceActivity:顯式層級的preference的Activity
4. 必須在manifest文件中聲明Activity,若是Activity不須要在其它應用中激活,則不須要提供intent filter, 只能經過顯式的intent來啓動。反之則須要提供intent filter,能夠經過隱式intent 啓動,也能夠經過設置android:exported 屬性爲false來使你的Activity爲private的。進程
5. 啓動有返回結果的Activity,startActivityForResult(), 須要實現onActivityResult()回調方法。當啓動的Activity退出(finish)後系統會調用這個方法。
6. 結束Activity,finish()中止本身或finishActivity()來中止一個先前啓動的Activity。因爲系統自動管理了Activity的生命週期,因此大多數狀況下,你不必顯式的調用這些結束方法來中止Activity, 這可能不利於用戶體驗。
7. Activity生命週期. Activity在本質上存在於三種狀態
a.
Resumed, Activity在前臺而且有用戶焦點, 一般也叫運行狀態。
b.
Paused, 另外一個Activity在前臺並擁有焦點,但它仍是可見的。也就是說當前擁有焦點的Activity是半透明或者是部分覆蓋屏幕的。處在這種狀態的Activity是徹底存活的(在內存中並和window manager鏈接), 可是系統會在內存極其低下時將其Kill
c.
Stopped, 這個Activity徹底被其它Activity覆蓋(在後臺),處在這種狀態的Activity也能夠是存活的(在內存中但不與window manager鏈接), 當不可見或系統內存低時會被Kill
Paused或Stopped狀態的Activity可被系統Kill, 不過仍然經過請求finish()方法。
8. Activity生命週期的回調方法。
a.
啓動相關方法,onCreate(),onStart(),onRestart(),onResume(), 這些方法以後Activity的宿主進程通常不會殺掉, 除非在沒有任何資源的緊急狀況下; 結束相關方法onPause(),onStop(),onDestroy(),這些方法以後Activity的宿主進程能夠被殺掉。
b.
全部對這些回調方法的實現必須在作任何事情以前調用super的相關方法。
c.
這些回調方法, 能夠監控Activity生命週期中的三個嵌套循環。
d.
完整的生命週期: 在onCreate()和onDestroy()之間發生,應該在onCreate()中初始化資源和狀態,如設置View, 在onDestroy()中釋放全部殘存的資源。 如Activity須要一個線程, 則應在onCreate()中啓動線程,而在onDestroy()中結束線程()。
e.
可視生命週期:在onStart()和onStop()之間發生,在這期間用戶能夠在屏幕上看到這個Activity。在這期間能夠維護須要展現給用戶顯式的資源。如在onStart()中註冊BroadcastReciver來接收影響用戶UI的改變,並在onStop()中註銷掉。
f.
前臺生命週期:在onResume()和onPause()之間, 在這期間其在全部Activity前面而且擁有用戶的輸入焦點, 這個狀態轉換比較頻繁,裏面的操做應該輕量級。
9. 保存Activity的狀態, 生命週期中的回調方法能夠在Activity對象沒有被銷燬時保留Activity的狀態,可是當Activity對象被系統銷燬後,當回到這個Activity時不能簡單的start這個Activity,而須要從新建立。 可是用戶並不知道這個Activity被銷燬並從新建立了它,用戶但願回到以前的樣子。 這就須要另外一個回調方法onSaveInstanceState()來保存Activity的狀態信息。
10. onSaveInstanceState()會傳遞你一個Bundle對象,你能夠把你須要保存的信息存放在裏面, 當系統殺掉了你的Activity所在的進程而且用戶又返回到你的Activity時, 這時就會把這個Bundle對象傳到onCreate()和onRestoreInstanceState()方法, 並利用它來恢復Activity的狀態, 若是沒有狀態信息儲存, 則Bundle對象爲空。Activity在每次銷燬以前onSaveInstanceState()並不必定都會執行,如當棧頂的Activity按back 退到前一Activity時就不會執行。 但從Activity(A1)進入另外一Activity(A2)時,會在A1.onPause()前執行A1.onSaveInstance(),並設置Bundle, 若是系統銷燬了A1, 從A2返回A1時, A1會從新A1.onCreate(), 並傳入以前設置的Bundle
11. Activity提供默認的onSaveInstanceState()方法來保存UI信息,但其它信息須要你本身保存。View中實現了方法dispatchSaveInstanceState(),onSaveInstanceState()來提供須要保存的UI信息,但View須要設置ID屬性且saveEnable的值爲true。
12. Activity啓動,回退等狀況下各回調方法執行順序(全部Activity在同一進程),各回調方法都是在主線程執行的,所以嚴格按照順序執行, 當須要作相關同步操做時尤爲要注意。
a.
一個Activity(A1)中啓動另外一個Activity(A2), A2徹底覆蓋A1
啓動:A1.onSaveInstance() àA1.onPause() àA2.onCreate()àA2.onStart()àA2.onResume()àA1.o
nStop()
回退(A1未被銷燬):A2.onPauseàA1.onRestart()àA1.onStart()àA1.onResume()àA2.onStop()
àA2.onDestroy()
回退(A1被銷燬):A2.onPauseàA1.onCreate()àA1.onStart()àA1.onResume()àA2.onStop()
àA2.onDestroy()
b.
一個Activity(A1)中啓動另外一個Activity(A2), A2部分覆蓋A1或半透明
啓動:A1.onSaveInstance() àA1.onPause() àA2.onCreate()àA2.onStart()àA2.onResume()
回退(A1未被銷燬):A2.onPauseàA1.onResume()àA2.onStop()àA2.onDestroy()
啓動後A1被銷燬,則A1會當即重建A1.onCreate()àA1.onStart()àA1.onResume()àA1.onStop()
A2啓動A3
啓動:A2.onPause()àA1.onStop()àA3.onCreate()àA3.onStart()àA3.onResume()àA2.onStop()
回退(A1未被銷燬):A3.onPauseà A1.onRestart()àA1.onStart()à A2.onRestart()àA2.onStart()àA2.onResume()àA3.onStop()àA3.onDestroy()
回退(A1被銷燬):A3.onPauseà A1.onCreate()àA1.onStart()àA1.onResume()àA1.onPause() A2.onRestart()àA2.onStart()àA2.onResume()àA3.onStop()àA3.onDestroy()
13. 處理配置變法:一些設備的配置可能會在運行時改變,如屏幕方向,鍵盤及語言等,當這些改變發生時,系統會銷燬並重啓這個Activity:onSaveInstanceState()àonPause()àonStop()àonDestroy()àonCreate()àonStart()àonResume(), 重啓是爲了讓你可以適應新的配置並自動重載資源。要適當處理這些變化,使用onSaveInstanceState()和onRestoreInstanceState()方法(或者onCreate())來保存你的狀態, 而在onConfigurationChanged()中處理變化。