Android筆記-Activity

Activity是一個能夠提供用戶一個屏幕讓用戶能夠來作某些交互的應用組件,好比撥打電話,拍照,發email或者查看地圖。每一個activity會給出一個窗口來繪製用戶界面。這個窗口一般會填滿整個屏幕,但有時也會比屏幕小點而且浮動在其餘屏幕的頂端。android

 

1.       Activity棧, Activity中能夠啓動新的Activity 當新的Activity啓動後, 前一Activity被中止, 並保存在Activity棧。當前Activity被壓入棧頂。ide

 

2.       建立Activity。須要繼承Activity 並實現一系列的回調方法。兩個重要的方法是佈局

a.        onCreate(), 當系統建立當前Activity時會調用這個方法,在你的實現中,你應該初始化一些你的Activity的必要組件, 最重要的是,你必須調用setContentView()來來指定你的Activity的用戶界面佈局。 spa

b.        onPause(), 系統會在用戶要離開(並不必定老是destroy)Activity的第一意向是調用這個方法。一般這是咱們須要提交一些用戶會話中須要保存的改變(由於用戶可能不再會回來)的時機; 這個方法是最後一個能夠保證在進程被kill 以前調用,所以須要在這個方法裏面存儲相當重要的數據,並且這些操做必須是輕量級的, 否則會阻塞下一個Activity的轉換進而影響用戶的體驗。 線程

 

3.       幾個Activity的子類:orm

a.        ListActivity:含有ListViewActivity 對象

b.        TabActivity:提供支持用戶Tab切換的Activity 繼承

c.        PreferenceActivity:顯式層級的preferenceActivity 生命週期

 

4.       必須在manifest文件中聲明Activity,若是Activity不須要在其它應用中激活,則不須要提供intent filter 只能經過顯式的intent來啓動。反之則須要提供intent filter,能夠經過隱式intent 啓動,也能夠經過設置android:exported 屬性爲false來使你的Activityprivate的。進程

 

5.       啓動有返回結果的ActivitystartActivityForResult(), 須要實現onActivityResult()回調方法。當啓動的Activity退出(finish)後系統會調用這個方法。

 

6.       結束Activityfinish()中止本身或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

 

PausedStopped狀態的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()並不必定都會執行,如當棧頂的Activityback 退到前一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.   處理配置變法:一些設備的配置可能會在運行時改變,如屏幕方向,鍵盤及語言等,當這些改變發生時,系統會銷燬並重啓這個ActivityonSaveInstanceState()àonPause()àonStop()àonDestroy()àonCreate()àonStart()àonResume() 重啓是爲了讓你可以適應新的配置並自動重載資源。要適當處理這些變化,使用onSaveInstanceState()onRestoreInstanceState()方法(或者onCreate())來保存你的狀態, 而在onConfigurationChanged()中處理變化。

相關文章
相關標籤/搜索