欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Android開發(fā)Activity的生命周期詳解

 更新時(shí)間:2022年07月28日 14:34:39   作者:程序遇上智能星空  
這篇文章主要介紹了Android開發(fā)Activity的生命周期詳解,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的朋友可以參一下

前言

Android生命周期分為兩部分: 

  • (1)典型情況下的生命周期
  • (2)異常情況下的生命周期

典型情況下的生命周期分析

圖1 Activity的生命周期圖解

圖2 Activity生命周期的金字塔圖 

(1)典型情況下的生命周期指在有用戶參與的情況下,Activity所經(jīng)過的生命周期的改變,正常情況下,Activity的常用生命周期有以下幾種情況:

  • onCreate():Activity啟動后第一個(gè)被調(diào)用的函數(shù),常用來進(jìn)行Activity的初始化,如創(chuàng)建View,綁定數(shù)據(jù)和恢復(fù)數(shù)據(jù)。
  • onStart():當(dāng)Activity顯示在屏幕上時(shí),函數(shù)被調(diào)用。
  • onRestart():Activity從停止?fàn)顟B(tài)進(jìn)入活動狀態(tài)是調(diào)用。
  • onResume():Activity可以接受用戶輸入時(shí),該函數(shù)被調(diào)用,此時(shí)的activity位于activity棧的棧頂。
  • onPause():當(dāng)Activity進(jìn)入暫停狀態(tài)時(shí),該函數(shù)被調(diào)用,一般用來保存持久的數(shù)據(jù)或釋放占用的資源。
  • onStop():當(dāng)Activity變?yōu)椴豢梢姾螅摵瘮?shù)被調(diào)用,Activity進(jìn)入停止?fàn)顟B(tài)。
  • onDestroy():在Activity被終止前,被調(diào)用。
/*1.onCreate:
    每個(gè)Activity在寫代碼的過程中都會看見這個(gè)函數(shù),
    是聲明周期的第一個(gè)方法。
    一般做一些資源和數(shù)據(jù)初始化的工作,
    比如綁定相對應(yīng)的資源布局setContentView*/
        @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }
/*2.onRestart:
    字面意思表示Activity重新啟動,這個(gè)狀態(tài)一般由用戶切換應(yīng)用的行為產(chǎn)生,
    比如從應(yīng)用切換到桌面或者切打開新的Activity,
    此時(shí)這個(gè)Activity就會調(diào)用onPause和onStop讓這個(gè)Activity進(jìn)入展廳狀態(tài)。
    再回到這個(gè)Activity就是onRestart了*/
        @Override
    protected void onRestart() {
        super.onRestart();
    }
/*3.onStart:
    這個(gè)狀態(tài)我理解就是Activity啟動中的一個(gè)過程,
    就是啟動中,但是還不能與用戶交互(用戶不可見),
    屬于一個(gè)在后臺的狀態(tài)*/
        @Override
    protected void onStart() {
        super.onStart();
    }
/*4.onResume:
    表示Activity已經(jīng)可見,且已經(jīng)開始活動。
    與onStart類似的狀態(tài)但是就是屬于一種在前臺的狀態(tài)*/
        @Override
    protected void onResume() {
        super.onResume();
    }
/*5.onPause:
    是一個(gè)非常微妙的狀態(tài),處于正在停止的一個(gè)臨界點(diǎn),
    就很難重現(xiàn)這種狀態(tài),就是在停止過程中,
    先執(zhí)行onPause然后在onStop執(zhí)行之前,
    回到Activity執(zhí)行onResume,這期間就是onPause的狀態(tài)。
    此處可以做一些存儲數(shù)據(jù)停止動畫的工作,但是不能太耗時(shí),
    不然會影響到新Activity的顯示,只有這些操作做完,
    新Activity的OnResume才會執(zhí)行。*/
        @Override
    protected void onPause() {
        super.onPause();
    }
/*6.onStop:
    表示Activity即將停止,可以做一些相對重量級的回收工作,
    同樣不能太耗時(shí)。*/
    @Override
    protected void onStop() {
        super.onStop();
    }
/*onDestroy
    表示Activity即將被銷毀,這是Activity生命的盡頭,
    可以做一些回收工作和資源的釋放。*/
    @Override
    protected void onDestroy() {
        super.onDestroy();
    }

(2)進(jìn)一步地,可以將Activity分為3種生存期:

  • 完整生存期:在 onCreate() 和 onDestroy() 之間所經(jīng)歷的。
  • 可見生存期:在 onStart() 和 onStop() 之間所經(jīng)歷的。
  • 前臺生存期:在 onResume() 和 onPause() 之間所經(jīng)歷的。

(3)Activity的活動狀態(tài)

  • 運(yùn)行狀態(tài):位于返回棧棧頂?shù)幕顒印?/li>
  • 暫停狀態(tài):不在棧頂位置,但仍然可見。
  • 停止?fàn)顟B(tài):不在棧頂位置,完全不可見。可能會被系統(tǒng)回收。
  • 銷毀狀態(tài):在返回棧中移除的活動。

(返回棧:每啟動一個(gè)新的活動,會在返回棧中入棧,并處于棧頂?shù)奈恢?。每銷毀一個(gè)活動,處于棧頂?shù)幕顒訒鰲?,前一個(gè)入棧的活動會重新處于棧頂?shù)奈恢?。?/p>

異常情況下的生命周期分析 (1)系統(tǒng)配置發(fā)生改變引起生命周期的異常變化

舉例:開啟手機(jī)的自動旋轉(zhuǎn)后,當(dāng)Activity從豎屏狀態(tài)轉(zhuǎn)變?yōu)闄M屏?xí)r,系統(tǒng)會自動銷毀原先的Activity并重建。如果不做特殊處理,那么每當(dāng)系統(tǒng)配置改變時(shí),Activity都會銷毀重建,

如圖所示:

圖3 旋轉(zhuǎn)手機(jī)時(shí)Activity的生命周期變化情況

當(dāng)手機(jī)從豎屏轉(zhuǎn)變?yōu)闄M屏?xí)r,可以看到原Activity執(zhí)行: onPause -> onSaveInstanceState -> onStop -> onDestroy ,走完原Activity的生命周期。當(dāng)原Activity銷毀后又會迅速的開啟新的Activity執(zhí)行 :onCreate -> onStart -> onRestoreInstanceState -> onResume, 最終新的Activity顯示在用戶界面上。onSaveInstanceState 和 onRestoreInstanceState 兩個(gè)方法僅在生命周期異常情況下執(zhí)行。onSaveInstanceState主要是對異常銷毀的Activity進(jìn)行數(shù)據(jù)保存,onRestoreInstanceState主要是對存儲的數(shù)據(jù)進(jìn)行恢復(fù),數(shù)據(jù)存取都是通過Bundle,因此我們可以在Bundle中附加個(gè)人數(shù)據(jù)進(jìn)行讀寫。經(jīng)過測試onSaveInstanceState在onStop前調(diào)用,onRestoreInstanceState在onStart方法后調(diào)用。這兩個(gè)方法執(zhí)行的過程中,系統(tǒng)會自動對視圖進(jìn)行信息數(shù)據(jù)的存取,例如:ListView的滾動位置等等。(2)資源內(nèi)存不足導(dǎo)致低優(yōu)先級的Activity被殺死

當(dāng)系統(tǒng)資源不足時(shí),系統(tǒng)會按照上述優(yōu)先級去殺死目標(biāo)的 Activity 所在的進(jìn)程,并在后續(xù)通過 onSaveInstanceState 和 onRestoreInstanceState 來存儲和恢復(fù)數(shù)據(jù)。如果一些后臺的進(jìn)程脫離了四大組件而獨(dú)立運(yùn)行,那么這個(gè)進(jìn)程很快就被殺死。我們常常將后臺工作放到 Service 中保持進(jìn)程具有一定的優(yōu)先級。

圖4 configChanges添加orientation后的效果

當(dāng)系統(tǒng)配置改變時(shí)Activity會銷毀重建,通過在AndroidMainManifest.xml中為Activity添加configChanges屬性去避免這個(gè)情況。configChanges的屬性有很多,例如:orientation表示屏幕方向變化、KeyboardHidden表示虛擬鍵盤可訪問性變化等,通過設(shè)置這些屬性后當(dāng)運(yùn)行過程中發(fā)生上述情況Activity既不會銷毀重建也不會調(diào)用 onSaveInstanceState 和 onRestoreInstanceState 兩個(gè)方法,而是執(zhí)行onConfigChanged方法。

問題: (1)onStart 和 onResume、onPause 和 onStop 從功能描述上看大同小異,到底有什么區(qū)別呢?

這兩組方法對的回調(diào)意義不同,onState 和onStop 是從 Activity 是否可見這個(gè)角度來回調(diào)的,而 onResume 和 onPause 是從 Activity 是否位于前臺這個(gè)角度來回調(diào)的,不過在實(shí)際使用中沒有其他明顯區(qū)別。

(2)假設(shè)當(dāng)前Activity為A,如果這時(shí)用戶打開了一個(gè)新的Activity B,那么B的onResume方法和A的onPause方法誰先執(zhí)行呢?

根據(jù)Android的基本運(yùn)行機(jī)制,不能在onPause中執(zhí)行重量級的操作,因?yàn)楸仨歰nPause執(zhí)行完成以后新Activity才能onResume。onPause和onResume都不能執(zhí)行耗時(shí)的操作,尤其是onPause,這就意味著我們應(yīng)該在onStop中操作,從而使新的Activity顯示出來并切換到前臺。

到此這篇關(guān)于Android開發(fā)Activity的生命周期詳解的文章就介紹到這了,更多相關(guān)Android Activity 內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評論