Activity生命周期

普通的Activity跳轉(zhuǎn)生命周期變化

  • MainActivity 啟動(dòng)

      D/LUtil: MainActivity onCreate()
      D/LUtil: MainActivity onStart()
      D/LUtil: MainActivity onResume()
    
  • 跳轉(zhuǎn)到 SecondActivity

      D/LUtil: MainActivity onPause()
      D/LUtil: SecondActivity onCreate()
      D/LUtil: SecondActivity onStart()
      D/LUtil: SecondActivity onResume()
      D/LUtil: MainActivity onStop()
    
  • SecondActivity 返回

      D/LUtil: SecondActivity onPause()
      D/LUtil: MainActivity onStart()
      D/LUtil: MainActivity onResume()
      D/LUtil: SecondActivity onStop()
      D/LUtil: SecondActivity onDestroy()
    
  • MainActivity 返回

      D/LUtil: MainActivity onPause()
      D/LUtil: MainActivity onStop()
      D/LUtil: MainActivity onDestroy()
    

finish() 函數(shù)在不同生命周期方法中的調(diào)用

  • onCreate() 中調(diào)用

      D/LUtil: MainActivity onCreate()
      D/LUtil: MainActivity onDestroy()
    
  • onStart() 中調(diào)用

      D/LUtil: MainActivity onCreate()
      D/LUtil: MainActivity onStart()
      D/LUtil: MainActivity onStop()
      D/LUtil: MainActivity onDestroy()
    
  • onResume() 中調(diào)用

      D/LUtil: MainActivity onCreate()
      D/LUtil: MainActivity onStart()
      D/LUtil: MainActivity onResume()
      D/LUtil: MainActivity onPause()
      D/LUtil: MainActivity onStop()
      D/LUtil: MainActivity onDestroy()
    

Activity 跳轉(zhuǎn)時(shí) finish() 函數(shù)調(diào)用

  • onPause() 中調(diào)用

      // MainActivity啟動(dòng)
      D/LUtil: MainActivity onCreate()
      D/LUtil: MainActivity onStart()
      D/LUtil: MainActivity onResume()
      // 點(diǎn)擊跳轉(zhuǎn)Button
      D/LUtil: MainActivity onPause()
      D/LUtil: SecondActivity onCreate()
      D/LUtil: SecondActivity onStart()
      D/LUtil: SecondActivity onResume()
      D/LUtil: MainActivity onStop()
      D/LUtil: MainActivity onDestroy()
      // 按返回鍵
      D/LUtil: SecondActivity onPause()
      D/LUtil: SecondActivity onStop()
      D/LUtil: SecondActivity onDestroy()
    
  • onStop() 中調(diào)用

      D/LUtil: MainActivity onCreate()
      D/LUtil: MainActivity onStart()
      D/LUtil: MainActivity onResume()
      // 點(diǎn)擊跳轉(zhuǎn)Button
      D/LUtil: MainActivity onPause()
      D/LUtil: SecondActivity onCreate()
      D/LUtil: SecondActivity onStart()
      D/LUtil: SecondActivity onResume()
      D/LUtil: MainActivity onStop()
      // 按返回鍵
      D/LUtil: SecondActivity onPause()
      D/LUtil: SecondActivity onStop()
      D/LUtil: SecondActivity onDestroy()
      D/LUtil: MainActivity onDestroy()
    

Activity 生命周期

Activity 生命周期
  • onCreate()

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

  • onRestart()

    在 Activity 已停止并即將再次啟動(dòng)前調(diào)用。始終后接 onStart()

  • onStart()

    在 Activity 即將對(duì)用戶可見之前調(diào)用。(可見而用戶沒有焦點(diǎn)
    如果 Activity 轉(zhuǎn)入前臺(tái),則后接 onResume(),如果 Activity 轉(zhuǎn)入隱藏狀態(tài),則后接 onStop()。

  • onResume()

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

  • onPause()

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

  • onStop()

    在 Activity 對(duì)用戶不再可見時(shí)調(diào)用。如果 Activity 被銷毀,或另一個(gè) Activity(一個(gè)現(xiàn)有 Activity 或新 Activity)繼續(xù)執(zhí)行并將其覆蓋,就可能發(fā)生這種情況。
    如果 Activity 恢復(fù)與用戶的交互,則后接 onRestart(),如果 Activity 被銷毀,則后接 onDestroy()。

  • onDestroy()

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

這些方法共同定義 Activity 的整個(gè)生命周期。您可以通過(guò)實(shí)現(xiàn)這些方法監(jiān)控 Activity 生命周期中的三個(gè)嵌套循環(huán):

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

  • Activity 的可見生命周期發(fā)生在 onStart() 調(diào)用與 onStop() 調(diào)用之間。在這段時(shí)間,用戶可以在屏幕上看到 Activity 并與其交互。 例如,當(dāng)一個(gè)新 Activity 啟動(dòng),并且此 Activity 不再可見時(shí),系統(tǒng)會(huì)調(diào)用 onStop()。您可以在調(diào)用這兩個(gè)方法之間保留向用戶顯示 Activity 所需的資源。 例如,您可以在 onStart() 中注冊(cè)一個(gè) BroadcastReceiver 以監(jiān)控影響 UI 的變化,并在用戶無(wú)法再看到您顯示的內(nèi)容時(shí)在 onStop() 中將其取消注冊(cè)。在 Activity 的整個(gè)生命周期,當(dāng) Activity 在對(duì)用戶可見和隱藏兩種狀態(tài)中交替變化時(shí),系統(tǒng)可能會(huì)多次調(diào)用 onStart() 和 onStop()。

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

管理 Activity 生命周期

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

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

  • 運(yùn)行中

    此 Activity 位于屏幕前臺(tái)并具有用戶焦點(diǎn)。

  • 暫停

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

  • 停止

    該 Activity 被另一個(gè) Activity 完全遮蓋(該 Activity 目前位于“后臺(tái)”)。 已停止的 Activity 同樣仍處于活動(dòng)狀態(tài)(Activity 對(duì)象保留在內(nèi)存中,它保留了所有狀態(tài)和成員信息,但未與窗口管理器連接)。 不過(guò),它對(duì)用戶不再可見,在他處需要內(nèi)存時(shí)可能會(huì)被系統(tǒng)終止。
    如果 Activity 處于暫?;蛲V?fàn)顟B(tài),系統(tǒng)可通過(guò)要求其結(jié)束(調(diào)用其 finish() 方法)或直接終止其進(jìn)程,將其從內(nèi)存中刪除。(將其結(jié)束或終止后)再次打開 Activity 時(shí),必須重建。

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

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

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