安卓重溫基礎(chǔ)--四大組件之Activity的生命周期

Activity 生命周期

通過實現(xiàn)回調(diào)方法管理 Activity 的生命周期對開發(fā)強大而又靈活的應(yīng)用至關(guān)重要。 Activity 的生命周期會直接受到 Activity 與其他 Activity、其任務(wù)及返回棧的關(guān)聯(lián)性的影響。

狀態(tài)圖

image.png

解讀狀態(tài)圖

  1. 首次創(chuàng)建 Activity 時回調(diào) onCreate()、onStart() 和 onResume() 方法進入運行態(tài)。一般在 onCreate() 方法中執(zhí)行所有正常的靜態(tài)設(shè)置 — 創(chuàng)建視圖、將數(shù)據(jù)綁定到列表等等。 系統(tǒng)向此方法傳遞一個 Bundle 對象可以用于還原 Activity 的狀態(tài)。不過一般是使用 onSaveInstanceState() 和 onRestoreInstanceState()。
  2. 當(dāng)另一個 Activity 出現(xiàn)在當(dāng)前 Activity 的上方,但是又未完全覆蓋當(dāng)前 Activity 或者有一個對話框在當(dāng)前 Activity 的上方時,Activity 回調(diào) onPause() 方法,進入暫停態(tài)。還原時回調(diào) onResume() 重新進入運行態(tài)。也有可能在系統(tǒng)需要內(nèi)存時被 finish 掉,這時需要重新創(chuàng)建 Activity。
  3. 當(dāng)另一個 Activity 出現(xiàn)在當(dāng)前 Activity 的上方,并且當(dāng)前 Activity 完全不可見時,回調(diào) onPause() 和 onStop() 方法,進入停止態(tài)。還原時回調(diào) onRestart(),onStart() 和 onResume() 方法。和暫停態(tài)一樣,也有可能在系統(tǒng)需要內(nèi)存時被 finish 掉,這時需要重新創(chuàng)建 Activity。
  4. 當(dāng) Activity 被 finish 或者系統(tǒng)銷毀時,回調(diào) onDestroy() 方法,Activity 的生命周期結(jié)束。

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

  1. Running

此 Activity 位于屏幕前臺并具有用戶焦點。

  1. onPause()

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

  1. onStop()

當(dāng)前 Activity 被另一個 Activity 完全遮蓋(該 Activity 目前位于“后臺”)。 處于停止?fàn)顟B(tài)的 Activity 同樣仍處于活動狀態(tài)(對象保留在內(nèi)存中,它保留了所有狀態(tài)和成員信息,但未與窗口管理器連接)。它對用戶不再可見,在他處需要內(nèi)存時可能會被系統(tǒng)終止。

系統(tǒng)處于暫?;蛲V?fàn)顟B(tài)時,系統(tǒng)可以要求其結(jié)束(finish掉),或者直接結(jié)束與該 Activity 有關(guān)的進程,將其從內(nèi)存刪除。Activity 被終止后必須重新 onCreate()。


實現(xiàn) Activity 的回調(diào)

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Log.e("Activity生命周期","onCreate()");
    }

    @Override
    protected void onStart() {
        super.onStart();
        Log.e("Activity生命周期","onStart()");
    }

    @Override
    protected void onRestart() {
        super.onRestart();
        Log.e("Activity生命周期","onRestart()");
    }

    @Override
    protected void onResume() {
        super.onResume();
        Log.e("Activity生命周期","onResume()");
    }


    @Override
    protected void onPause() {
        super.onPause();
        Log.e("Activity生命周期","onPause()");
    }

    @Override
    protected void onStop() {
        super.onStop();
        Log.e("Activity生命周期","onStop()");
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        Log.e("Activity生命周期","onDestroy()");
    }

Activity 的 整個生命周期 發(fā)生在 onCreate() 調(diào)用與 onDestroy() 調(diào)用之間。您的 Activity 應(yīng)在 onCreate() 中執(zhí)行“全局”狀態(tài)設(shè)置(例如定義布局),并在 onDestroy() 中釋放所有其余資源。例如,如果您的 Activity 有一個在后臺運行的線程,用于從網(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 之前,并具有用戶焦點。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)變速度慢而讓用戶等待。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 轉(zhuǎn)自Android四大基本組件介紹與生命周期Android四大基本組件分別是Activity,Service服務(wù),...
    開子的私家地閱讀 1,573評論 0 5
  • 啟動與銷毀Activity 不同于使用 main() 方法啟動應(yīng)用的其他編程范例,Android 系統(tǒng)會通過調(diào)用對...
    安卓Boy閱讀 1,882評論 3 5
  • Activity 是一個應(yīng)用組件,用戶可與其提供的屏幕進行交互,以執(zhí)行撥打電話、拍攝照片、發(fā)送電子郵件或查看地圖等...
    岳小川閱讀 546評論 0 3
  • 關(guān)于為什么要寫屬于自己的博客,我在前一篇文章中也提到了。主要是歸納自己這一個時期所學(xué)到的知識,幫助自己更好的理解,...
    Kevin_Jern閱讀 1,022評論 0 8
  • 有一個沒腦子姑娘,目前最喜歡的事就是正確認識自己說自己“沒腦子”,喜歡嘻嘻哈哈笑笑鬧鬧,有時候又一個人靜靜地一就功...
    君芊汐閱讀 443評論 0 0

友情鏈接更多精彩內(nèi)容