Android之Activity全面解析

本文分為以下幾個(gè)部分:
1会涎、Activity是什么?
2熊榛、如何創(chuàng)建Activity讼昆?
3、Activity生命周期
4其兴、Activity啟動(dòng)模式詳解

Activity是什么?

Activity是一個(gè)應(yīng)用程序組件顶瞒,用戶可以與其提供的屏幕進(jìn)行交互,例如撥打電話元旬,拍照榴徐,發(fā)送電子郵件等守问。Activity 提供窗口供應(yīng)用在其中繪制界面。此窗口通常會(huì)填滿屏幕箕速,但也可能比屏幕小酪碘,并浮動(dòng)在其他窗口上面朋譬。

大多數(shù)應(yīng)用包含多個(gè)屏幕盐茎,意味著會(huì)有多個(gè)Activity。通常徙赢,應(yīng)用中的一個(gè) Activity 會(huì)被指定為主 Activity字柠,這是用戶啟動(dòng)應(yīng)用時(shí)出現(xiàn)的第一個(gè)屏幕。然后狡赐,每個(gè) Activity 可以啟動(dòng)另一個(gè) Activity窑业,以執(zhí)行不同的操作。例如枕屉,一個(gè)簡(jiǎn)單的電子郵件應(yīng)用中的主 Activity 可能會(huì)提供顯示電子郵件收件箱的屏幕常柄。主 Activity 可能會(huì)從該屏幕啟動(dòng)其他 Activity,以提供執(zhí)行寫郵件和打開(kāi)郵件這類任務(wù)的屏幕搀擂。

如何創(chuàng)建Activity?

要?jiǎng)?chuàng)建Activity西潘,必須創(chuàng)建Activity的子類。在子類中哨颂,您需要實(shí)現(xiàn)當(dāng)Activity在其生命周期的各個(gè)狀態(tài)之間轉(zhuǎn)換時(shí)系統(tǒng)調(diào)用的回調(diào)方法喷市,如下:

public class ExampleActivity extends AppCompatActivity {

 @Override
    public void onCreate(@Nullable Bundle savedInstanceState, @Nullable PersistableBundle persistentState) {
        super.onCreate(savedInstanceState, persistentState);
       //您必須實(shí)現(xiàn)此方法。系統(tǒng)在創(chuàng)建Activity時(shí)調(diào)用此方法威恼。最重要的是品姓,您必須在此處調(diào)用以定義Activity用戶界面的布局。
        setContentView();
    }
}

最重要的要在manifest中聲明此Activity及其特定屬性:

    <manifest ... >
      <application ... >
          <activity android:name=".ExampleActivity" />
          ...
      </application ... >
      ...
    </manifest >

Activity的生命周期

一個(gè) Activity 在其生命周期中會(huì)經(jīng)歷多種狀態(tài)箫措。您可以使用一系列回調(diào)來(lái)處理狀態(tài)之間的轉(zhuǎn)換腹备。
Activity完整的生命周期方法:

public class ExampleActivity extends Activity {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        // The activity is being created.
    }
    @Override
    protected void onStart() {
        super.onStart();
        // The activity is about to become visible.
    }
    @Override
    protected void onResume() {
        super.onResume();
        // The activity has become visible (it is now "resumed").
    }
    @Override
    protected void onPause() {
        super.onPause();
        // Another activity is taking focus (this activity is about to be "paused").
    }
    @Override
    protected void onStop() {
        super.onStop();
        // The activity is no longer visible (it is now "stopped")
    }
    @Override
    protected void onDestroy() {
        super.onDestroy();
        // The activity is about to be destroyed.
    }
}

下面介紹這些方法:

onCreate()

必須實(shí)現(xiàn)此回調(diào),它會(huì)在系統(tǒng)創(chuàng)建您的 Activity 時(shí)觸發(fā)斤蔓。最重要的是植酥,您必須在此處調(diào)用 setContentView() 來(lái)定義 Activity 界面的布局。onCreate完成后附迷,下一個(gè)回調(diào)將是onStart()

onStart()

onCreate()退出后惧互,Activity 將進(jìn)入“已啟動(dòng)”狀態(tài),并對(duì)用戶可見(jiàn)喇伯。此回調(diào)包含 Activity 進(jìn)入前臺(tái)與用戶進(jìn)行互動(dòng)之前的最后準(zhǔn)備工作喊儡。

onResume()

系統(tǒng)會(huì)在 Activity 開(kāi)始與用戶互動(dòng)之前調(diào)用此回調(diào)。此時(shí)稻据,該 Activity 位于 Activity 堆棧的頂部艾猜,并會(huì)捕獲所有用戶輸入买喧。應(yīng)用的大部分核心功能都是在onResume()方法中實(shí)現(xiàn)的。
onResume()回調(diào)后面總是跟著onPause()回調(diào)匆赃。

onPause()

當(dāng) Activity 失去焦點(diǎn)并進(jìn)入“已暫陀倜”狀態(tài)時(shí),系統(tǒng)就會(huì)調(diào)用 onPause()算柳。例如低淡,當(dāng)用戶點(diǎn)按“返回”或“最近使用的應(yīng)用”按鈕時(shí),就會(huì)出現(xiàn)此狀態(tài)瞬项。當(dāng)系統(tǒng)為您的 Activity 調(diào)用onPause() 時(shí)蔗蹋,從技術(shù)上來(lái)說(shuō),這意味著您的 Activity 仍然部分可見(jiàn)囱淋,但大多數(shù)情況下猪杭,這表明用戶正在離開(kāi)該 Activity,該 Activity 很快將進(jìn)入“已停止”或“已恢復(fù)”狀態(tài)妥衣。

如果用戶希望界面繼續(xù)更新皂吮,則處于“已暫停”狀態(tài)的 Activity 也可以繼續(xù)更新界面税手。例如蜂筹,顯示導(dǎo)航地圖屏幕或播放媒體播放器的 Activity 就屬于此類 Activity。即使此類 Activity 失去了焦點(diǎn)冈止,用戶仍希望其界面繼續(xù)更新狂票。
您不應(yīng)使用 onPause()來(lái)保存應(yīng)用或用戶數(shù)據(jù)、進(jìn)行網(wǎng)絡(luò)呼叫或執(zhí)行數(shù)據(jù)庫(kù)事務(wù)熙暴。
onPause() 執(zhí)行完畢后闺属,下一個(gè)回調(diào)為onStop()或 onResume()具體取決于 Activity 進(jìn)入“已暫停”狀態(tài)后發(fā)生的情況周霉。

onStop()

當(dāng) Activity 對(duì)用戶不再可見(jiàn)時(shí)掂器,系統(tǒng)會(huì)調(diào)用onStop()。出現(xiàn)這種情況的原因可能是 Activity 被銷毀俱箱,新的 Activity 啟動(dòng)国瓮,或者現(xiàn)有的 Activity 正在進(jìn)入“已恢復(fù)”狀態(tài)并覆蓋了已停止的 Activity。在所有這些情況下狞谱,停止的 Activity 都將完全不再可見(jiàn)乃摹。
系統(tǒng)調(diào)用的下一個(gè)回調(diào)將是onRestart()(如果 Activity 重新與用戶互動(dòng))或者 onDestroy()(如果 Activity 徹底終止)。

onRestart()

當(dāng)處于“已停止”狀態(tài)的 Activity 即將重啟時(shí)跟衅,系統(tǒng)就會(huì)調(diào)用此回調(diào)孵睬。onRestart() 會(huì)從 Activity 停止時(shí)的狀態(tài)恢復(fù) Activity。此回調(diào)后面總是跟著 onStart()伶跷。

onDestroy()

系統(tǒng)會(huì)在銷毀 Activity 之前調(diào)用此回調(diào)掰读。
此回調(diào)是 Activity 接收的最后一個(gè)回調(diào)秘狞。通常,實(shí)現(xiàn) onDestroy()是為了確保在銷毀 Activity 或包含該 Activity 的進(jìn)程時(shí)釋放該 Activity 的所有資源蹈集。

最后給個(gè)經(jīng)典圖片:


activity lifecycle.png

Activity啟動(dòng)模式詳解

詳細(xì)參考:深入理解Activity啟動(dòng)模式

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末烁试,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子拢肆,更是在濱河造成了極大的恐慌减响,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,941評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件善榛,死亡現(xiàn)場(chǎng)離奇詭異辩蛋,居然都是意外死亡呻畸,警方通過(guò)查閱死者的電腦和手機(jī)移盆,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,397評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)伤为,“玉大人咒循,你說(shuō)我怎么就攤上這事〗视蓿” “怎么了叙甸?”我有些...
    開(kāi)封第一講書人閱讀 165,345評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)位衩。 經(jīng)常有香客問(wèn)我裆蒸,道長(zhǎng),這世上最難降的妖魔是什么糖驴? 我笑而不...
    開(kāi)封第一講書人閱讀 58,851評(píng)論 1 295
  • 正文 為了忘掉前任僚祷,我火速辦了婚禮,結(jié)果婚禮上贮缕,老公的妹妹穿的比我還像新娘辙谜。我一直安慰自己,他們只是感情好感昼,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,868評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布装哆。 她就那樣靜靜地躺著,像睡著了一般定嗓。 火紅的嫁衣襯著肌膚如雪蜕琴。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書人閱讀 51,688評(píng)論 1 305
  • 那天宵溅,我揣著相機(jī)與錄音凌简,去河邊找鬼。 笑死层玲,一個(gè)胖子當(dāng)著我的面吹牛号醉,可吹牛的內(nèi)容都是我干的反症。 我是一名探鬼主播,決...
    沈念sama閱讀 40,414評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼畔派,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼铅碍!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起线椰,我...
    開(kāi)封第一講書人閱讀 39,319評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤胞谈,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后憨愉,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體烦绳,經(jīng)...
    沈念sama閱讀 45,775評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,945評(píng)論 3 336
  • 正文 我和宋清朗相戀三年配紫,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了径密。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,096評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡躺孝,死狀恐怖享扔,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情植袍,我是刑警寧澤惧眠,帶...
    沈念sama閱讀 35,789評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站于个,受9級(jí)特大地震影響氛魁,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜厅篓,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,437評(píng)論 3 331
  • 文/蒙蒙 一秀存、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧贷笛,春花似錦应又、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 31,993評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至汇荐,卻和暖如春洞就,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背掀淘。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 33,107評(píng)論 1 271
  • 我被黑心中介騙來(lái)泰國(guó)打工旬蟋, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人革娄。 一個(gè)月前我還...
    沈念sama閱讀 48,308評(píng)論 3 372
  • 正文 我出身青樓倾贰,卻偏偏與公主長(zhǎng)得像冕碟,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子匆浙,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,037評(píng)論 2 355

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

  • 前言 基于最近要準(zhǔn)備去面試,特意系統(tǒng)的復(fù)習(xí)了下Android基礎(chǔ),看到Activity這塊時(shí),發(fā)現(xiàn)很多都忘了,而且...
    darryrzhong閱讀 25,837評(píng)論 1 17
  • 目錄 一首尼、前言 Activity作為安卓四大組件之一挑庶,是最重要也是用得最多的組件,涉及的知識(shí)點(diǎn)非常多软能,有些知識(shí)點(diǎn)平...
    碼農(nóng)翻身記閱讀 832評(píng)論 0 1
  • 從實(shí)習(xí)到現(xiàn)在迎捺,工作了也快一年了,期間過(guò)程也碰到和解決了不少的問(wèn)題查排,我的為知筆記上也積累了許許多多零零散散的知識(shí)點(diǎn)凳枝。...
    Dracula716閱讀 5,791評(píng)論 1 13
  • 一、Activity的生命周期 本節(jié)內(nèi)容將生命周期的情況分為兩部分介紹雹嗦,第一部分先了解典型的生命周期的7個(gè)部分及A...
    小池laucherish閱讀 547評(píng)論 0 0
  • 一.Activity的生命周期全面解析 1.生命周期分為兩部分內(nèi)容范舀,一部分是典型的生命周期(指有用戶參與的情況下,...
    北思南閱讀 816評(píng)論 0 0