開篇,我們陳述一下activity,activity是整個應用使用者互動的核心元件,了解activity的工作模式,生命周期和管理方式,是了解android的基礎,本節主講
activity的生命周期與工作模式
activity調用棧管理
activity作為四大組建出現平率最高的元件,我們在哪裡都能看到他,就讓我們一起先來了解一下他的生命周期
activity是使用者互動的第一接口,他提供了一個使用者完成指令的視窗,當開發者建立activity之後,通過調用setcontentview來指定一個視窗界面,并以此為基礎,提供給使用者互動的接口,系統采用activity棧的方式來管理activity
activity一個最大的特點就是擁有多種形态,他可以在多種形态中自由切換,以此來控制自己的生命周期
activity/running
這個時候,activity處于activity棧的最頂層,可見,并與使用者進行互動
paused
activity失去焦點,被一個新的非全屏的activity或者一個透明的activity放置在棧頂時,activity就轉換成了qaused形态,他是去了與使用者互動的能力,所有狀态資訊,成員變量都還保留着,隻有在系統記憶體極地的情況下,才會被系統回收
stopped
如果一個activity被另一個activity完全覆寫,那麼activity就會進入stop形态,此時他不在可見,但依然保留着所有的狀态和成員變量
killed
當activity被系統回收或者activity從來沒有建立過,activity就處于killed狀态, 由此可見,使用者的不同操作,會讓activity進入四種不同的狀态,而開發者,隻能控制其生,卻不能控制其死
google給了我們一張圖來表示activity的生命周期,他希望activity能被開發者所控制,而不是一匹脫缰的野馬

開發者必然不必實作所有的生命周期方法,但是必須知道每一個生命周期的含義,可以讓我們更好的掌控activity,讓他能完成你所期望的效果
在系統調用oncreate方法之後,就會馬上調用onstart,然後繼續調用onresume來進圖運作狀态,最後都會停在onresume狀态,完成啟動,系統會調用ondestroy來結束一個activity的生命周期讓他毀掉kill狀态 以上就是一個activity的啟動和銷毀的過程
oncreate中建立基本的ui元素
onpause和onstop:清除acvtivity的資源,避免浪費
ondestroy:因為引用會在activity銷毀的時候銷毀,而線程不會,是以清除開啟的線程
當棧頂的activity部分不可見的時候,就會倒置activity進入onpause
onpause:釋放系統資源,
onresume:需要重新初始化onpause釋放的資源
棧頂的activity部分不可見的時候,實際上後續會有兩種可能,從部分不可見到可見,也就是恢複過程,從部分不可見到完全不可見,也就是停止過程,系統在目前activity不可見的時候調用onpause
最後我們來看看activity是如何重新建立的,如果你的系統長時間處于stop的狀态,而此時系統需要更多的記憶體或者系統記憶體比較緊張的時候,系統就會回收你的activity,而系統為了補償你,會将你的activity狀态通過onrestoreinstancestate()方法儲存到bundle中去,當然你也可以額外增加鍵值對去儲存這些狀态,當你重新需要建立這個activity的時候,儲存的bundle對象就會傳遞到activity的onrestoreinstancestate()方法中去與oncreate方法中去,這也是oncreate的重要參數——saveinstancestate的來源 不過這裡要注意的一點就是savedinstancestate方法并不是每次當activity離開前台就會調用,如果使用者使用finish方法結束,則不會調用,而且android系統已經預設實作了控件的緩存狀态,一次來減少開發者需要實作的緩存邏輯
一個android應用程式功能通常會被拆分為多個activity,而各個activity之間通過intcnt進行連接配接,而android系統,通過棧結構來儲存整個app的activity,棧底的元素是整個任務棧的發起者。一個合理的任務排程棧不僅是性能的保證, 更是提供性能的基礎。 當一個app啟動時,如果目前環境中不存在該app的任務棧,那麼系統就會建立一個任務棧,這個app所啟動的activity都将在這個任務棧中被管理,這個棧也被稱為task