activity

純粹是個人學(xué)習(xí)總結(jié),如有不對的地方請吐槽呜投。

Activity的簡單介紹

什么是Activity?
activity是用戶可與之交互的獨立的可以聚焦的東西;它可以為用戶提供的是一個簡單的Window淘正,用戶可用于堆放自己想要的UI效果。

Activity是一個線程或者進(jìn)程嗎臼闻?
不是鸿吆,Activity是存在于某個進(jìn)程中,不是每一個activity都對應(yīng)于一個新的進(jìn)程述呐,多個activity可以在同一個進(jìn)程里面惩淳,甚至多個應(yīng)用還可以在同一個進(jìn)程里面;當(dāng)然可以設(shè)置不同的LaunchMode讓一個activity起來的時候創(chuàng)建一個進(jìn)程乓搬,但它本身肯定不是線程或者進(jìn)程思犁,但它通常是這個進(jìn)程的主角;

Activity本身的執(zhí)行邏輯是怎么樣的进肯?

總結(jié)一下: Activity是Android提供的應(yīng)用程序架構(gòu)激蹲,它規(guī)定了一個應(yīng)用運行的框架,它的生老病死江掩;負(fù)責(zé)它的基礎(chǔ)設(shè)施的創(chuàng)建和銷毀学辱,以及各個activity之間的切換,狀態(tài)管理等环形; 有了這些規(guī)定策泣,每個應(yīng)用開發(fā)者,不需要關(guān)心進(jìn)程的創(chuàng)建抬吟,不需關(guān)心主循環(huán)萨咕,比如你不會在apk包里面看到main函數(shù),你也不會在apk包里面看到有關(guān)主循環(huán)的東西火本,你也不需要關(guān)心你的程序如何被暫停危队,如何被關(guān)閉等等,只需要按照它規(guī)定的接口寫钙畔,就萬事俱備茫陆;這些接口也很簡單,也就是onCreate刃鳄,onStart盅弛,onResume,onPause,onResume,onRestart,onStop,onDestory,這些接口也不是都需要實現(xiàn)的挪鹏,

Activity是Android應(yīng)用程序組件见秽,實現(xiàn)一個用戶交互窗口,我們可以實現(xiàn)布局填充屏幕讨盒,也可以實現(xiàn)懸浮窗口解取。一個app由很多個Actvitiy組合而成,它們之間用intent-filter區(qū)別主次關(guān)系返顺。

activity子類:

ListActivity禀苦、ActivityGroup、TabActivity遂鹊、PreferenceActivity振乏、FragmentActivity 、ListFragment秉扑、NativeActivity慧邮、ExpandableListActivity、LauncherActivity舟陆、AliasActivity误澳、PreferenceFragment、ActivityUnitTestCase秦躯,AppCompatActivity

activity父類:

activity》ContextThemeWrapper》ContextWrapper》Context》Object

Activity的四種狀態(tài)

Running狀態(tài):一個新的Activity啟動入棧后忆谓,它在屏幕最前端,處于棧的最頂端踱承,此時它處于可見并可和用戶交互的激活狀態(tài)倡缠。

Paused狀態(tài):當(dāng)Activity被另一個透明或者Dialog樣式的Activity覆蓋時的狀態(tài)。此時它依然與窗口管理器保持連接勾扭,系統(tǒng)繼續(xù)維護(hù)其內(nèi)部狀態(tài)毡琉,它仍然可見,但它已經(jīng)失去了焦點妙色,故不可與用戶交互。

Stopped狀態(tài):當(dāng)Activity不可見時慧耍,Activity處于Stopped狀態(tài)身辨。當(dāng)Activity處于此狀態(tài)時,一定要保存當(dāng)前數(shù)據(jù)和當(dāng)前的UI狀態(tài)芍碧,否則一旦Activity退出或關(guān)閉時煌珊,當(dāng)前的數(shù)據(jù)和UI狀態(tài)就丟失了。

Killed狀態(tài):Activity被殺掉以后或者被啟動以前泌豆,處于Killed狀態(tài)定庵。這是Activity已從Activity堆棧中移除,需要重新啟動才可以顯示和使用。

4種狀態(tài)中蔬浙,Running狀態(tài)和Paused狀態(tài)是可見的猪落,Stopped狀態(tài)和Killed狀態(tài)時不可見的。

activity四種啟動模式:

簡單說明(適用版):

1. standard

    默認(rèn)啟動模式畴博,每次激活A(yù)ctivity時都會創(chuàng)建Activity笨忌,并放入任務(wù)棧中,永遠(yuǎn)不會調(diào)用onNewIntent()俱病。  

2. singleTop

    如果在任務(wù)的棧頂正好存在該Activity的實例官疲, 就重用該實例,并調(diào)用其onNewIntent()亮隙,否者就會創(chuàng)建新的實例并放入棧頂(即使棧中已經(jīng)存在該Activity實例途凫,只要不在棧頂,都會創(chuàng)建實例溢吻,而不會調(diào)用onNewIntent()维费,此時就跟standard模式一樣)。  

3. singleTask

    如果在棧中已經(jīng)有該Activity的實例煤裙,就重用該實例(會調(diào)用實例的onNewIntent())掩完。重用時,會讓該實例回到棧頂硼砰,因此在它上面的實例將會被移除棧且蓬。如果棧中不存在該實例,將會創(chuàng)建新的實例放入棧中(此時不會調(diào)用onNewIntent())题翰。   

4. singleInstance

    在一個新棧中創(chuàng)建該Activity實例恶阴,并讓多個應(yīng)用共享改棧中的該Activity實例。一旦改模式的Activity的實例存在于某個棧中豹障,任何應(yīng)用再激活改Activity時都會重用該棧中的實例冯事,其效果相當(dāng)于多個應(yīng)用程序共享一個應(yīng)用,不管誰激活該Activity都會進(jìn)入同一個應(yīng)用中血公。

詳細(xì)說明:

standard模式:
默認(rèn)模式昵仅,可以不用寫配置。在這個模式下累魔,都會默認(rèn)創(chuàng)建一個新的實例摔笤。因此,在這種模式下垦写,可以有多個相同的實例吕世,也允許多個相同Activity疊加。

singleTop模式:
可以有多個實例梯投,但是不允許多個相同Activity疊加命辖。即况毅,如果Activity在棧頂?shù)臅r候,啟動相同的Activity尔艇,不會創(chuàng)建新的實例尔许,而會調(diào)用其onNewIntent方法。
若我意圖打開的順序為B1->B2->B2漓帚,則實際打開的順序為B1->B2(后一次意圖打開B2母债,實際只調(diào)用了前一個的onNewIntent方法)
若我意圖打開的順序為B1->B2->B1->B2,則實際打開的順序與意圖的一致尝抖,為B1->B2->B1->B2毡们。

singleTask模式:
只有一個實例。在同一個應(yīng)用程序中啟動他的時候昧辽,若Activity不存在衙熔,則會在當(dāng)前task創(chuàng)建一個新的實例,若存在搅荞,則會把task中在其之上的其它Activity destory掉并調(diào)用它的onNewIntent方法红氯。
如果是在別的應(yīng)用程序中啟動它,則會新建一個task咕痛,并在該task中啟動這個Activity痢甘,singleTask允許別的Activity與其在一個task中共存,也就是說茉贡,如果我在這個singleTask的實例中再打開新的Activity塞栅,這個新的Activity還是會在singleTask的實例的task中。

singleInstance模式:
只有一個實例腔丧,并且這個實例獨立運行在一個task中放椰,這個task只有這個實例,不允許有別的Activity存在愉粤。
程序有三個ActivityD1,D2,D3砾医,三個Activity可互相啟動,其中D2為singleInstance模式衣厘。那么程序從D1開始運行如蚜,假設(shè)D1的taskId為200,那么從D1啟動D2時影暴,D2會新啟動一個task怖亭,即D2與D1不在一個task中運行。假設(shè)D2的taskId為201坤检,再從D2啟動D3時,D3的taskId為200期吓,也就是說它被壓到了D1啟動的任務(wù)棧中早歇。

若是在別的應(yīng)用程序打開D2倾芝,假設(shè)Other的taskId為200,打開D2箭跳,D2會新建一個task運行晨另,假設(shè)它的taskId為201,那么如果這時再從D2啟動D1或者D3谱姓,則又會再創(chuàng)建一個task借尿,因此,若操作步驟為other->D2->D1屉来,這過程就涉及到了3個task了路翻。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市茄靠,隨后出現(xiàn)的幾起案子茂契,更是在濱河造成了極大的恐慌,老刑警劉巖慨绳,帶你破解...
    沈念sama閱讀 206,839評論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件掉冶,死亡現(xiàn)場離奇詭異,居然都是意外死亡脐雪,警方通過查閱死者的電腦和手機(jī)厌小,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,543評論 2 382
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來战秋,“玉大人璧亚,你說我怎么就攤上這事』裱” “怎么了涨岁?”我有些...
    開封第一講書人閱讀 153,116評論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長吉嚣。 經(jīng)常有香客問我梢薪,道長,這世上最難降的妖魔是什么尝哆? 我笑而不...
    開封第一講書人閱讀 55,371評論 1 279
  • 正文 為了忘掉前任秉撇,我火速辦了婚禮,結(jié)果婚禮上秋泄,老公的妹妹穿的比我還像新娘琐馆。我一直安慰自己,他們只是感情好恒序,可當(dāng)我...
    茶點故事閱讀 64,384評論 5 374
  • 文/花漫 我一把揭開白布瘦麸。 她就那樣靜靜地躺著,像睡著了一般歧胁。 火紅的嫁衣襯著肌膚如雪滋饲。 梳的紋絲不亂的頭發(fā)上厉碟,一...
    開封第一講書人閱讀 49,111評論 1 285
  • 那天,我揣著相機(jī)與錄音屠缭,去河邊找鬼箍鼓。 笑死,一個胖子當(dāng)著我的面吹牛呵曹,可吹牛的內(nèi)容都是我干的款咖。 我是一名探鬼主播,決...
    沈念sama閱讀 38,416評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼奄喂,長吁一口氣:“原來是場噩夢啊……” “哼铐殃!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起砍聊,我...
    開封第一講書人閱讀 37,053評論 0 259
  • 序言:老撾萬榮一對情侶失蹤背稼,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后玻蝌,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體蟹肘,經(jīng)...
    沈念sama閱讀 43,558評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,007評論 2 325
  • 正文 我和宋清朗相戀三年俯树,在試婚紗的時候發(fā)現(xiàn)自己被綠了帘腹。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,117評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡许饿,死狀恐怖阳欲,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情陋率,我是刑警寧澤球化,帶...
    沈念sama閱讀 33,756評論 4 324
  • 正文 年R本政府宣布,位于F島的核電站瓦糟,受9級特大地震影響筒愚,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜菩浙,卻給世界環(huán)境...
    茶點故事閱讀 39,324評論 3 307
  • 文/蒙蒙 一巢掺、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧劲蜻,春花似錦陆淀、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,315評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至疫蔓,卻和暖如春浸剩,著一層夾襖步出監(jiān)牢的瞬間钾军,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,539評論 1 262
  • 我被黑心中介騙來泰國打工绢要, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人拗小。 一個月前我還...
    沈念sama閱讀 45,578評論 2 355
  • 正文 我出身青樓重罪,卻偏偏與公主長得像,于是被迫代替她去往敵國和親哀九。 傳聞我的和親對象是個殘疾皇子剿配,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,877評論 2 345

推薦閱讀更多精彩內(nèi)容