android四大組件----Activity(一)

一、生命周期


生命周期

onCreate():當(dāng)activity被創(chuàng)建時(shí)調(diào)用,在這里主要做一些初始化的操作衅澈,如設(shè)置布局、初始化視圖谬墙、綁定控件等等今布。

onStart():當(dāng)用戶變成用戶可見時(shí)調(diào)用,此時(shí)的activity還不可見拭抬。舉個(gè)例子說明一下這個(gè)函數(shù)的意義部默,當(dāng)你按下home鍵直接返回了主頁面,再進(jìn)入這個(gè)activity時(shí)造虎,會(huì)先調(diào)用onRestart()函數(shù)傅蹂,再調(diào)用它,而不會(huì)去調(diào)用onCreate()函數(shù)了。這個(gè)函數(shù)一般是注冊一些變量份蝴,這些變量只有activity類在前臺(tái)時(shí)才能被響應(yīng).

onResume():activity獲取焦點(diǎn)時(shí)調(diào)用犁功,此時(shí)activity返回棧頂,并處于運(yùn)行狀態(tài)婚夫。這里一般可以做一些刷新UI的操作浸卦,每當(dāng)activity調(diào)用到這里時(shí)就刷新一下控件。

Activity失去了焦點(diǎn):這個(gè)很多人不理解案糙,這個(gè)失去焦點(diǎn)的意思就是用戶不能對(duì)activity操作了限嫌,比如我們彈出來一個(gè)廣告或者升級(jí)提示,這時(shí)activity我們就不能操作了时捌,但是依舊能看見怒医,當(dāng)再次關(guān)閉這個(gè)彈窗時(shí),又獲取了焦點(diǎn)奢讨,就再次執(zhí)行onResume()方法裆熙。

onPause():說明白了失去焦點(diǎn)的原因,這個(gè)函數(shù)就很容易理解了禽笑。這個(gè)函數(shù)主要是界面失去了焦點(diǎn),通常在這個(gè)函數(shù)中是對(duì)一些變量做操作蛤奥,會(huì)釋放一些占CPU資源佳镜,或者保存一些關(guān)鍵的數(shù)據(jù).官方解釋:

? ? (1)當(dāng)activity進(jìn)入后臺(tái)并且該Activity并未銷毀時(shí),該方法會(huì)被調(diào)用

? ? (2)在Activity A中啟動(dòng)Activity B,如果B的活動(dòng)頁面覆蓋在了A上面凡桥,那么Activity A則會(huì)調(diào)用onPause().

? ? (3)onPause()方法對(duì)應(yīng)的方法是onResume,如果一個(gè)Activity調(diào)用了onPause()不活動(dòng)狀態(tài)時(shí)蟀伸,那么當(dāng)Activity進(jìn)入活動(dòng)狀態(tài)的時(shí)候必定會(huì)調(diào)用onResume().

onStop():界面不可見,在activity完全不可見時(shí)調(diào)用.官方解釋:

? ? (1)當(dāng)前的Activity不再呈現(xiàn)給用戶的時(shí)候缅刽,onStop()被調(diào)用啊掏。

? ? (2)如果onStop()方法被調(diào)用之后,那么該Activity就處于掛起狀態(tài)衰猛。那么在此時(shí)的情況下迟蜜,要么喚醒它(onRestart()),要么銷毀它(onDestroy())啡省。

? ? (3)在某些情況下娜睛,該方法可能不會(huì)被調(diào)用。比如系統(tǒng)內(nèi)存過低導(dǎo)致無法確保在onPause()方法在被調(diào)用之后該Activity繼續(xù)保持著運(yùn)行狀態(tài)卦睹。

onDestroy():activity銷毀

onRestart():當(dāng)用戶按Home鍵返回桌面畦戒,并重新進(jìn)入activity時(shí)被調(diào)用。

生命周期這一塊用幾個(gè)例子加深一下理解:

(1)Activity A啟動(dòng)了Activity B的時(shí)候结序,Activity A和Activity B的生命周期的運(yùn)行的方法排序是什么障斋?

? ?正常狀態(tài):?onPause(A) -> onCreate(B) -> onStart(B) -> onResume(B) -> onStop(A)

? ? Dialog:onPause(A) -> onCreate(B) -> onStart(B) -> onResume(B)

(2)當(dāng)處于Activity B時(shí),點(diǎn)擊返回鍵回到Activity A時(shí),Activity A 和 Activity B的生命周期的運(yùn)行的方法排序是什么垃环?

? ? 正常狀態(tài):onPause(B) -> onRestart(A) -> onStart(A) -> onResume(A) -> onStop(B) -> onDestroy(B)

? ? Dialog:onPause(B) -> onResume(A) -> onStop(B) -> onDestroy(B)

(3)當(dāng)處于Activity B時(shí)邀层,按下鎖屏按鈕,Activity A和Activity B的生命周期方法排序是什么晴裹?

? ??正常狀態(tài):onPause(B) -> onStop(B)被济,重新喚醒時(shí):onRestart(B) -> onStart(B) -> onResume(B)

? ? Dialog:onPause(B) -> onStop(B) -> onStop(A),重新喚醒時(shí):onRestart(B) -> onStart(B) -> onRestart(A) -> onStart(A) ->?? ??????onResume(B)

(4)如果設(shè)置Activity B的主題為Dialog風(fēng)格的話,那么(1)(2)(3)的結(jié)果分別是什么涧团?

二只磷、啟動(dòng)模式

? ??standard:默認(rèn)模式,可以不用寫配置泌绣。在這個(gè)模式下钮追,都會(huì)默認(rèn)創(chuàng)建一個(gè)新的實(shí)例。因此阿迈,在這種模式下元媚,可以有多個(gè)相同的實(shí)例,也允許多個(gè)相同的Activity疊加苗沧。

? ??singletask:開啟一個(gè)ActivityB的時(shí)候檢查任務(wù)棧里面是否有這個(gè)ActivityB的實(shí)例存在刊棕,如果存在的話,清空這個(gè)任務(wù)棧ActivityB上面的所有的Activity待逞,復(fù)用這個(gè)ActivityB甥角。

? ??singletop:如果發(fā)現(xiàn)任務(wù)棧的棧頂已經(jīng)存在這個(gè)Activity,再去開啟Activity的時(shí)候识樱,就不去重新創(chuàng)建新的Activity而是復(fù)用這個(gè)棧頂已經(jīng)存在的Activity嗤无。

singleinstance:開啟一個(gè)新的任務(wù)棧,任務(wù)棧里面只有一個(gè)Activity的實(shí)例存在怜庸,如果這個(gè)Activity被開啟当犯,把這個(gè)任務(wù)棧放在前面,如果開啟了新的別的Activity割疾,則別的Activity所在的任務(wù)棧會(huì)被放在前面嚎卫。極端的說,在整個(gè)手機(jī)的操作系統(tǒng)里面只會(huì)有一個(gè)實(shí)例存在宏榕。

三驰凛、創(chuàng)建流程

? ? (1)自定義類名,繼承Activity類(Activity和AppCompatActivity二選一担扑,后者提供了一些新的東西).

? ? (2)重寫onCreate()方法恰响,在該方法中調(diào)setContentView()設(shè)置要顯示的視圖.


? ? (3)在AndroidManifest.xml對(duì)Activity進(jìn)行配置


? ? 注意:onCreate()方法中的函數(shù),可以填兩個(gè)參數(shù)一個(gè)是Bundle savedInstanceState,另一個(gè)是PersistableBundle persistableState,如果要用第二個(gè)函數(shù)要在配置文件中為Activity設(shè)置一個(gè)屬性:

? ? ? ? ? ? android:persistableMode="persistAcrossReboots"

然后Activity就有了持久化的能力涌献,一般會(huì)搭配兩個(gè)方法使用:

public void onSaveInstanceState(Bundle outState, PersistableBundle outPersistentState)public void onRestoreInstanceState(Bundle savedInstanceState, PersistableBundle persistentState);

前一個(gè)方法會(huì)在下述情形中被調(diào)用:

1.點(diǎn)擊home鍵回到主頁或長按后選擇運(yùn)行其他程序

2.按下電源鍵關(guān)閉屏幕

3.啟動(dòng)新的Activity

4.橫豎屏切換時(shí)胚宦,肯定會(huì)執(zhí)行,因?yàn)闄M豎屏切換的時(shí)候會(huì)先銷毀Act,然后再重新創(chuàng)建 重要原則:當(dāng)系統(tǒng)"未經(jīng)你許可"時(shí)銷毀了你的activity枢劝,則onSaveInstanceState會(huì)被系統(tǒng)調(diào)用井联, 這是系統(tǒng)的責(zé)任,因?yàn)樗仨氁峁┮粋€(gè)機(jī)會(huì)讓你保存你的數(shù)據(jù)(你可以保存也可以不保存)您旁。

說回這個(gè)Activity擁有了持久化的能力烙常,增加的這個(gè)PersistableBundle參數(shù)令這些方法 擁有了系統(tǒng)關(guān)機(jī)后重啟的數(shù)據(jù)恢復(fù)能力!鹤盒!而且不影響我們其他的序列化操作

四蚕脏、啟動(dòng)一個(gè)Activity的幾種方式

1.顯式啟動(dòng)

? ? (1)最常用的

? ? ? ? ? ? startActivity(new Intent(當(dāng)前Act.this,要啟動(dòng)的Act.class));

? ? ?(2)通過Intent的ComponentName:

? ? ? ? ? ??ComponentName cn = new ComponentName("當(dāng)前Act的全限定類名","啟動(dòng)Act的全限定類名") ;

? ? ? ? ? ? Intent intent = new Intent() ;

? ? ? ? ? ? intent.setComponent(cn) ;

????????????startActivity(intent) ;

? ? (3)初始化Intent時(shí)指定包名

????????????Intent intent = new Intent("android.intent.action.MAIN");

????????????intent.setClassName("當(dāng)前Act的全限定類名","啟動(dòng)Act的全限定類名");

????????????startActivity(intent);

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市侦锯,隨后出現(xiàn)的幾起案子驼鞭,更是在濱河造成了極大的恐慌,老刑警劉巖尺碰,帶你破解...
    沈念sama閱讀 219,427評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件挣棕,死亡現(xiàn)場離奇詭異,居然都是意外死亡亲桥,警方通過查閱死者的電腦和手機(jī)洛心,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,551評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來题篷,“玉大人词身,你說我怎么就攤上這事〉看眨” “怎么了?”我有些...
    開封第一講書人閱讀 165,747評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵璧瞬,是天一觀的道長户辫。 經(jīng)常有香客問我,道長嗤锉,這世上最難降的妖魔是什么渔欢? 我笑而不...
    開封第一講書人閱讀 58,939評(píng)論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮瘟忱,結(jié)果婚禮上奥额,老公的妹妹穿的比我還像新娘。我一直安慰自己访诱,他們只是感情好垫挨,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,955評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著触菜,像睡著了一般九榔。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,737評(píng)論 1 305
  • 那天哲泊,我揣著相機(jī)與錄音剩蟀,去河邊找鬼。 笑死切威,一個(gè)胖子當(dāng)著我的面吹牛育特,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播先朦,決...
    沈念sama閱讀 40,448評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼缰冤,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了烙无?” 一聲冷哼從身側(cè)響起锋谐,我...
    開封第一講書人閱讀 39,352評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎截酷,沒想到半個(gè)月后涮拗,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,834評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡迂苛,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,992評(píng)論 3 338
  • 正文 我和宋清朗相戀三年三热,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片三幻。...
    茶點(diǎn)故事閱讀 40,133評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡就漾,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出念搬,到底是詐尸還是另有隱情抑堡,我是刑警寧澤,帶...
    沈念sama閱讀 35,815評(píng)論 5 346
  • 正文 年R本政府宣布朗徊,位于F島的核電站首妖,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏爷恳。R本人自食惡果不足惜有缆,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,477評(píng)論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望温亲。 院中可真熱鬧棚壁,春花似錦、人聲如沸栈虚。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,022評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽魂务。三九已至在刺,卻和暖如春逆害,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背蚣驼。 一陣腳步聲響...
    開封第一講書人閱讀 33,147評(píng)論 1 272
  • 我被黑心中介騙來泰國打工魄幕, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人颖杏。 一個(gè)月前我還...
    沈念sama閱讀 48,398評(píng)論 3 373
  • 正文 我出身青樓纯陨,卻偏偏與公主長得像,于是被迫代替她去往敵國和親留储。 傳聞我的和親對(duì)象是個(gè)殘疾皇子翼抠,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,077評(píng)論 2 355

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

  • 七月中旬正式進(jìn)入公司,八月初正式開始接觸android获讳。三個(gè)多月以來阴颖,一直沒些什么東西,這一篇是首秀丐膝,后面還會(huì)陸續(xù)...
    白板x閱讀 253評(píng)論 0 0
  • Android四大組件之ActivityAndroid四大組件之ServiceAndroid四大組件之Broadc...
    MonkeyLqj閱讀 1,263評(píng)論 0 7
  • 【Android Activity】 什么是 Activity? 四大組件之一,通常一個(gè)用戶交互界面對(duì)應(yīng)一個(gè) ac...
    Rtia閱讀 3,810評(píng)論 3 18
  • Activity簡介 Activity是Android一個(gè)非常重要的用戶接口(四大組件之一)量愧,是可見的,主要是用戶...
    艾曼大山閱讀 486評(píng)論 0 3
  • 關(guān)于為什么要寫屬于自己的博客帅矗,我在前一篇文章中也提到了偎肃。主要是歸納自己這一個(gè)時(shí)期所學(xué)到的知識(shí),幫助自己更好的理解浑此,...
    Kevin_Jern閱讀 897評(píng)論 0 9