從接觸Android到現(xiàn)在鸭巴,最常掛在嘴邊的就是Android四大組件鹃祖。下面我談?wù)剬?duì)四大組件的理解普舆,今天先給大家介紹一下Activity
1.1Activity的四種狀態(tài)
running/paused/stopped/killed
running:當(dāng)前Activity正處于運(yùn)行狀態(tài)池磁,指的是當(dāng)前Activity獲取了焦點(diǎn)楷兽。
paused:當(dāng)前Activity正處于暫停狀態(tài),指的是當(dāng)前Activity失去焦點(diǎn)端考,此時(shí)的Activity并沒有被銷毀揭厚,內(nèi)存里面的成員變量却特,狀態(tài)信息等仍然存在,當(dāng)然這個(gè)Activity也仍然可見筛圆。
stopped:與paused狀態(tài)相似裂明,stopped狀態(tài)的Activity是完全不可見的,但是內(nèi)存里面的成員變量太援,狀態(tài)信息等仍然存在闽晦,但是也沒有被銷毀。
killed:已經(jīng)被銷毀的Activity才處于killed狀態(tài)提岔,它的內(nèi)存里面的成員變量仙蛉,狀態(tài)信息等都會(huì)被一并回收。
1.2 Activity的生命周期
1).onCreate方法
當(dāng)Activity第一次創(chuàng)建的時(shí)候調(diào)用碱蒙。這個(gè)方法主要給我們提供了初始化操作荠瘪,如:創(chuàng)建view,綁定數(shù)據(jù)等哀墓。另外這個(gè)方法里還有一個(gè)bundle參數(shù)褒搔,這個(gè)參數(shù)可以用來恢復(fù)數(shù)據(jù)等。
2).onStart方法
onCreate方法執(zhí)行以后磕瓷,onStart方法緊接著開始執(zhí)行。該方法表示Activity已經(jīng)顯示了符匾,但是還不能與用戶交互焰坪。
3).onResume方法
調(diào)用onResume方法后,Activity就可以與用戶進(jìn)行交互,此時(shí)Activity就位于Activity 棧的棧頂瘟仿。
4).onPause方法
調(diào)用onPause方法,Activity失去焦點(diǎn)衣洁,無法再與用戶交互环凿,但是依舊可見。
5).onStop方法
Activity不可見考赛,進(jìn)入后臺(tái)悔雹。
6).onRestart方法
Activity由不可見變?yōu)榭梢娛钦{(diào)用該方法梯找。
7).onDestory方法
Activity被銷毀久免。
1.3特殊生命周期分析
1).啟動(dòng)Activity鸽捻;回到桌面;再次啟動(dòng)Activity
onCreate---->onStart---->onResume
onPause---->onStop
onRestart---->onStart---->onResume
2).按Back鍵退出activity
onPause---->onStop---->onDestory
3).從activityA跳轉(zhuǎn)到activityB中
onPause---->onCreate---->onStart---->onResume---->onStop
1.4與生命周期相關(guān)的重要方法
1.4.1 onSaveInstanceState與onRestoreInstanceState方法
activity通過onSaveInstanceState()方法保存activity的狀態(tài)遵馆,在onCreate或者onRestoreInstanceState方法恢復(fù)狀態(tài)逻恐,如果是通過onRestart方法前端運(yùn)行的話,只會(huì)執(zhí)行onSaveInstanceState方法
1.4.2 onConfigurationChanged方法
橫豎屏切換
https://blog.csdn.net/wulianghuan/article/details/8603982
2.Activity啟動(dòng)模式
Activity的啟動(dòng)模式包含四種亏栈,分別是:standard黎侈、singleTop、singleTask脐往、singleInstance休吠。
1)standard模式
這是Activity的標(biāo)準(zhǔn)啟動(dòng)模式,如果我們不對(duì)Activity做任何特殊處理的情況下就默認(rèn)為該模式啟動(dòng),所以該模式并不需要在manifest或者Intent里進(jìn)行指定梅尤。不管Activity實(shí)例在任務(wù)棧中是否存在矾湃,每次打開Activity都會(huì)在任務(wù)棧中新建一個(gè)Activity實(shí)例拍屑。
2)singleTop模式
棧頂復(fù)用模式星爪,該模式簡單來說,啟動(dòng)的Activity已經(jīng)在任務(wù)棧的棧頂話痊项,那么再啟動(dòng)這個(gè)Activity的時(shí)候就不會(huì)創(chuàng)建該實(shí)例锅风,否則就會(huì)創(chuàng)建該實(shí)例。
3)singleTask模式
棧內(nèi)復(fù)用模式鞍泉,singleTask指的是一個(gè)任務(wù)棧中只能存在一個(gè)這樣的Acitivity皱埠。
4)singleInstance模式
單實(shí)例模式,該模式是四個(gè)模式當(dāng)中最為特殊的一個(gè)咖驮,設(shè)置了該模式啟動(dòng)的Acitivyt會(huì)在一個(gè)獨(dú)立的任務(wù)棧中開啟边器,同事該任務(wù)棧有且只有一個(gè)這樣的Activity實(shí)例。
singleInstace與singleTask的區(qū)別在于:singleTask啟動(dòng)的Activity在系統(tǒng)層面上來說是可以有多個(gè)實(shí)例的托修。但如果該ActivityA是singleInstance模式的話忘巧,那么無論有多少個(gè)應(yīng)用程序調(diào)用它,它都只可能在系統(tǒng)中存在一個(gè)實(shí)例同時(shí)該實(shí)例還是位于它自己的一個(gè)單獨(dú)的任務(wù)棧中睦刃。
如何指定啟動(dòng)模式
1)我們可以在manifest里通過Activity的launchMode進(jìn)行指定
2).通過Intent中setFlags來指定啟動(dòng)模式
1.Intent.FLAG_ACTIVITY_NEW_TASK
2.Intent.FLAG_ACTIVITY_SINGLE_TOP
3.Intent.FLAG_ACTIVITY_CLEAR_TOP
4.Intent.FLAG_ACTIVITY_NO_HISTORY
Android四大組件之BroadcastReceiver(二)
http://www.reibang.com/writer#/notebooks/24597241/notes/28897568
Android四大組件之Service(三)
http://www.reibang.com/writer#/notebooks/24597241/notes/28900282