四大組件之一 -- Activity

此章節(jié)參考Android官網(wǎng)內(nèi)容而編寫,如有遺漏决采,后面會慢慢補(bǔ)上自沧。

一、Activity是什么?

Activity是android的一個應(yīng)用組件拇厢,是用戶與應(yīng)用交互的活動窗口爱谁。一個應(yīng)用由若干個Activity組成,每個Activity之間有或多或少的聯(lián)系孝偎。

一般指定某個Activity作為應(yīng)用的主Activity访敌,應(yīng)用啟動的時候會先顯示主Activity。而每個Activity都可以啟動其他的Activity衣盾。

二寺旺、創(chuàng)建Activity

創(chuàng)建Activity,必須創(chuàng)建Activity的子類(或使用其現(xiàn)有的子類)势决,需要在Acitivty的各個生命周期中調(diào)用回調(diào)方法阻塑。其中,最重要的兩個回調(diào)方法是:

onCreate():必須實(shí)現(xiàn)此方法徽龟。系統(tǒng)會在創(chuàng)建您的 Activity 時調(diào)用此方法叮姑。您應(yīng)該在實(shí)現(xiàn)內(nèi)初始化 Activity 的必需組件。 最重要的是据悔,您必須在此方法內(nèi)調(diào)用setContentView传透,以定義 Activity 用戶界面的布局。

onPause():系統(tǒng)將此方法作為用戶離開 Activity 的第一個信號(但并不總是意味著 Activity 會被銷毀)進(jìn)行調(diào)用极颓。 您通常應(yīng)該在此方法內(nèi)確認(rèn)在當(dāng)前用戶會話結(jié)束后仍然有效的任何更改(因?yàn)橛脩艨赡懿粫祷卮私缑妫?/p>

為了保證用戶體驗(yàn)的流暢度朱盐,還需要在其他的生命周期回調(diào)函數(shù)中,寫上處理邏輯菠隆。

在清單文件中聲明 Activity:

在清單文件中兵琳,將<activity>添加到<application>的子項(xiàng)中。
下面列舉<activity>節(jié)點(diǎn)的屬性骇径,并對部分做詳細(xì)說明:

1.android:allowTaskReparenting? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 2.android:alwaysRetainTaskState? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 3.android:clearTaskOnLaunch? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 4.android:configChanges
在某些設(shè)備配置(比如屏幕方向躯肌,字體大小,網(wǎng)絡(luò)類型等)發(fā)生變化的時候破衔,Activity將會被重新啟動以適配新的配置清女,這是系統(tǒng)行為。而Android同樣為應(yīng)用程序提供了一個阻止這種行為發(fā)生的手段晰筛,如果你不想因?yàn)槟撤N配置變化而發(fā)生Activity重啟嫡丙,則可以通過配置這個屬性并選擇你想要阻止的配置。如果你配置完畢并選擇了你關(guān)注的配置读第,則當(dāng)這些配置發(fā)生改變的時候Activity不會重啟曙博,而是通過onConfigurationChanged()回調(diào)方法通知應(yīng)用程序這些配置發(fā)生了變化。
5.android:enabled
6.android:excludeFromRecents
7.android:exported
8.android:finishOnTaskLaunch
9.android:hardwareAccelerated
該屬性是指是否應(yīng)為該Activity啟動硬件加速怜瞒,如果應(yīng)啟動父泳,則為true,否則為false。默認(rèn)值是false尘吗。
注意:不是所有的OpenGL 2D操作都會被加速逝她。如果啟用硬件加速渲染器,則要測試你的應(yīng)用程序以便確保它能使用渲染器而不會產(chǎn)生錯誤睬捶。
10.android:icon
11.android:label
12.android:launchMode
這個屬性描述了該Activity應(yīng)該如何被啟動。在Intent對象中近刘,與Activity標(biāo)志一起工作的模式有4種擒贸,分別是:standard,singleTop,singleTask和singleInstance。默認(rèn)模式是standard觉渴。
13.android:multiprocess
14.android:name
15.android:noHistory
16.android:permission
17.android:process
18.android:screenOrientation
該屬性表示Activity顯示的方向(比如縱向介劫,橫向)。
19.android:stateNotNeeded
20.android:taskAffinity
21.android:theme
22.android:windowSoftInputMode
該屬性表示Activity的主窗口如何與包含屏幕軟鍵盤的窗口交互案淋。設(shè)置該屬性將影響兩件事座韵。
①軟鍵盤的狀態(tài)。當(dāng)Activity獲取輸入焦點(diǎn)時踢京,是否隱藏軟鍵盤誉碴。
②對Activity主窗口的調(diào)整。該窗口是否被調(diào)整得更小一些來為軟鍵盤騰出空間瓣距,或者它的內(nèi)容是否被移動以便在部分窗口被軟鍵盤覆蓋時黔帕,使得當(dāng)前焦點(diǎn)可見。

使用 Intent 過濾器:

<activity>元素還可指定各種 Intent 過濾器—使用<intent-filter>元素—以聲明其他應(yīng)用組件激活它的方法蹈丸。

三成黄、啟動Activity

startActivity()
您可以通過調(diào)用startActivity(),并將其傳遞給描述您想啟動的 Activity 的Intent來啟動另一個 Activity.逻杖。
這里不僅可以啟動應(yīng)用內(nèi)的Activity奋岁,還能啟動其他應(yīng)用的Activity。
還可以調(diào)用系統(tǒng)的某些功能荸百,比如打電話闻伶,發(fā)郵件等。
startActivityForResult():
您可能需要從啟動的 Activity 獲得結(jié)果管搪。在這種情況下虾攻,請通過調(diào)用startActivityForResult()(而非startActivity())來啟動 Activity。 要想在隨后收到后續(xù) Activity 的結(jié)果更鲁,請實(shí)現(xiàn)onActivityResult()回調(diào)方法霎箍。 當(dāng)后續(xù) Activity 完成時,它會使用Intent向您的onActivityResult()方法返回結(jié)果澡为。

四漂坏、結(jié)束Activity

您可以通過調(diào)用 Activity 的finish()方法來結(jié)束該 Activity。您還可以通過調(diào)用finishActivity()結(jié)束您之前啟動的另一個 Activity。

五顶别、管理Activity生命周期

Activity基本上是以三種狀態(tài)存在:

運(yùn)行中:此 Activity 位于屏幕前臺并具有用戶焦點(diǎn)谷徙。

暫停:另一個 Activity 位于屏幕前臺并具有用戶焦點(diǎn),但此 Activity 仍可見驯绎。也就是說完慧,另一個 Activity 顯示在此 Activity 上方,并且該 Activity 部分透明或未覆蓋整個屏幕剩失。 暫停的 Activity 處于完全活動狀態(tài)(Activity對象保留在內(nèi)存中屈尼,它保留了所有狀態(tài)和成員信息,并與窗口管理器保持連接)拴孤,但在內(nèi)存極度不足的情況下脾歧,可能會被系統(tǒng)終止。

停止:該 Activity 被另一個 Activity 完全遮蓋(該 Activity 目前位于“后臺”)演熟。 已停止的 Activity 同樣仍處于活動狀態(tài)(Activity對象保留在內(nèi)存中鞭执,它保留了所有狀態(tài)和成員信息,但與窗口管理器連接)芒粹。 不過兄纺,它對用戶不再可見,在他處需要內(nèi)存時可能會被系統(tǒng)終止是辕。

實(shí)現(xiàn)生命周期回調(diào)

onCreate(BundlesavedInstanceState):// The activity is being created.
onStart()// The activity is about to become visible.
onResume()// The activity has become visible (it is now "resumed").
onPause()// Another activity is taking focus (this activity is about to be "paused").
onStop()// The activity is no longer visible (it is now "stopped")
onDestroy()// The activity is about to be destroyed.

您在實(shí)現(xiàn)上面這些生命周期方法時必須始終先調(diào)用超類實(shí)現(xiàn)囤热,然后再執(zhí)行任何操作。

生命周期的三層嵌套:

整個生命周期:Activity 的整個生命周期發(fā)生在onCreate()調(diào)用與onDestroy()調(diào)用之間获三。您的 Activity 應(yīng)在onCreate()中執(zhí)行“全局”狀態(tài)設(shè)置(例如定義布局)旁蔼,并釋放onDestroy()中的所有其余資源。例如疙教,如果您的 Activity 有一個在后臺運(yùn)行的線程棺聊,用于從網(wǎng)絡(luò)上下載數(shù)據(jù),它可能會在onCreate()中創(chuàng)建該線程贞谓,然后在onDestroy()中停止該線程限佩。

可見生命周期:Activity 的可見生命周期發(fā)生在onStart()調(diào)用與onStop()調(diào)用之間。在這段時間裸弦,用戶可以在屏幕上看到 Activity 并與其交互祟同。 例如,當(dāng)一個新 Activity 啟動理疙,并且此 Activity 不再可見時晕城,系統(tǒng)會調(diào)用onStop()。您可以在調(diào)用這兩個方法之間保留向用戶顯示 Activity 所需的資源窖贤。 例如砖顷,您可以在onStart()中注冊一個BroadcastReceiver以監(jiān)控影響 UI 的變化贰锁,并在用戶無法再看到您顯示的內(nèi)容時在onStop()中將其取消注冊。在 Activity 的整個生命周期滤蝠,當(dāng) Activity 在對用戶可見和隱藏兩種狀態(tài)中交替變化時豌熄,系統(tǒng)可能會多次調(diào)用onStart()onStop()

前臺生命周期:Activity 的前臺生命周期發(fā)生在onResume()調(diào)用與onPause()調(diào)用之間物咳。在這段時間锣险,Activity 位于屏幕上的所有其他 Activity 之前,并具有用戶輸入焦點(diǎn)览闰。 Activity 可頻繁轉(zhuǎn)入和轉(zhuǎn)出前臺 — 例如囱持,當(dāng)設(shè)備轉(zhuǎn)入休眠狀態(tài)或出現(xiàn)對話框時,系統(tǒng)會調(diào)用onPause()焕济。 由于此狀態(tài)可能經(jīng)常發(fā)生轉(zhuǎn)變,因此這兩個方法中應(yīng)采用適度輕量級的代碼盔几,以避免因轉(zhuǎn)變速度慢而讓用戶等待晴弃。

下圖是完整的activity生命周期圖:


onCreate():首次創(chuàng)建 Activity 時調(diào)用。 您應(yīng)該在此方法中執(zhí)行所有正常的靜態(tài)設(shè)置 — 創(chuàng)建視圖逊拍、將數(shù)據(jù)綁定到列表等等上鞠。 系統(tǒng)向此方法傳遞一個 Bundle 對象,其中包含 Activity 的上一狀態(tài)芯丧,不過前提是捕獲了該狀態(tài)(請參閱后文的保存 Activity 狀態(tài))芍阎。始終后接onStart()。

onRestart():在 Activity 已停止并即將再次啟動前調(diào)用缨恒。始終后接onStart()谴咸。

onStart():在 Activity 即將對用戶可見之前調(diào)用。如果 Activity 轉(zhuǎn)入前臺骗露,則后接onResume()岭佳,如果 Activity 轉(zhuǎn)入隱藏狀態(tài),則后接onStop()萧锉。

onResume():在 Activity 即將開始與用戶進(jìn)行交互之前調(diào)用珊随。 此時,Activity 處于 Activity 堆棧的頂層,并具有用戶輸入焦點(diǎn)。始終后接onPause()提针。

onPause():當(dāng)系統(tǒng)即將開始繼續(xù)另一個 Activity 時調(diào)用岳颇。 此方法通常用于確認(rèn)對持久性數(shù)據(jù)的未保存更改、停止動畫以及其他可能消耗 CPU 的內(nèi)容粮彤,諸如此類。 它應(yīng)該非常迅速地執(zhí)行所需操作,因?yàn)樗祷睾蟛研觯乱粋€ Activity 才能繼續(xù)執(zhí)行不恭。
如果 Activity 返回前臺,則后接onResume()财饥,如果 Activity 轉(zhuǎn)入對用戶不可見狀態(tài)换吧,則后接onStop()。

onStop():在 Activity 對用戶不再可見時調(diào)用钥星。如果 Activity 被銷毀沾瓦,或另一個 Activity(一個現(xiàn)有 Activity 或新 Activity)繼續(xù)執(zhí)行并將其覆蓋,就可能發(fā)生這種情況谦炒。
如果 Activity 恢復(fù)與用戶的交互贯莺,則后接onRestart(),如果 Activity 被銷毀宁改,則后接onDestroy()缕探。

onDestroy():在 Activity 被銷毀前調(diào)用。這是 Activity 將收到的最后調(diào)用还蹲。 當(dāng) Activity 結(jié)束(有人對 Activity 調(diào)用了finish())爹耗,或系統(tǒng)為節(jié)省空間而暫時銷毀該 Activity 實(shí)例時,可能會調(diào)用它谜喊。 您可以通過isFinishing()方法區(qū)分這兩種情形潭兽。

保存 Activity 狀態(tài)

協(xié)調(diào) Activity

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市斗遏,隨后出現(xiàn)的幾起案子山卦,更是在濱河造成了極大的恐慌,老刑警劉巖诵次,帶你破解...
    沈念sama閱讀 212,454評論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件账蓉,死亡現(xiàn)場離奇詭異,居然都是意外死亡藻懒,警方通過查閱死者的電腦和手機(jī)剔猿,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,553評論 3 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來嬉荆,“玉大人归敬,你說我怎么就攤上這事”稍纾” “怎么了汪茧?”我有些...
    開封第一講書人閱讀 157,921評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長限番。 經(jīng)常有香客問我舱污,道長,這世上最難降的妖魔是什么弥虐? 我笑而不...
    開封第一講書人閱讀 56,648評論 1 284
  • 正文 為了忘掉前任扩灯,我火速辦了婚禮媚赖,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘珠插。我一直安慰自己惧磺,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,770評論 6 386
  • 文/花漫 我一把揭開白布捻撑。 她就那樣靜靜地躺著磨隘,像睡著了一般。 火紅的嫁衣襯著肌膚如雪顾患。 梳的紋絲不亂的頭發(fā)上番捂,一...
    開封第一講書人閱讀 49,950評論 1 291
  • 那天,我揣著相機(jī)與錄音江解,去河邊找鬼设预。 笑死,一個胖子當(dāng)著我的面吹牛犁河,可吹牛的內(nèi)容都是我干的絮缅。 我是一名探鬼主播,決...
    沈念sama閱讀 39,090評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼呼股,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了画恰?” 一聲冷哼從身側(cè)響起彭谁,我...
    開封第一講書人閱讀 37,817評論 0 268
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎允扇,沒想到半個月后缠局,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,275評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡考润,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,592評論 2 327
  • 正文 我和宋清朗相戀三年狭园,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片糊治。...
    茶點(diǎn)故事閱讀 38,724評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡唱矛,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出井辜,到底是詐尸還是另有隱情绎谦,我是刑警寧澤,帶...
    沈念sama閱讀 34,409評論 4 333
  • 正文 年R本政府宣布粥脚,位于F島的核電站窃肠,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏刷允。R本人自食惡果不足惜冤留,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,052評論 3 316
  • 文/蒙蒙 一碧囊、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧纤怒,春花似錦糯而、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,815評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至州既,卻和暖如春谜洽,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背吴叶。 一陣腳步聲響...
    開封第一講書人閱讀 32,043評論 1 266
  • 我被黑心中介騙來泰國打工阐虚, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人蚌卤。 一個月前我還...
    沈念sama閱讀 46,503評論 2 361
  • 正文 我出身青樓实束,卻偏偏與公主長得像,于是被迫代替她去往敵國和親逊彭。 傳聞我的和親對象是個殘疾皇子咸灿,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,627評論 2 350

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

  • Activity 是一個應(yīng)用組件,用戶可與其提供的屏幕進(jìn)行交互侮叮,以執(zhí)行撥打電話避矢、拍攝照片、發(fā)送電子郵件或查看地圖等...
    岳小川閱讀 481評論 0 3
  • 轉(zhuǎn)自Android四大基本組件介紹與生命周期Android四大基本組件分別是Activity囊榜,Service服務(wù),...
    開子的私家地閱讀 1,410評論 0 5
  • 關(guān)于為什么要寫屬于自己的博客审胸,我在前一篇文章中也提到了。主要是歸納自己這一個時期所學(xué)到的知識卸勺,幫助自己更好的理解砂沛,...
    Kevin_Jern閱讀 886評論 0 9
  • 她說,放學(xué)之后有一個溺水的安全知識講座曙求。我在九天城西門街道閑逛碍庵,等她。有一個琴行在招攬學(xué)員悟狱,吉他手唱著蹩腳的流行歌...
    任艾軍閱讀 350評論 1 3