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

Android中的Activity生命周期總結(jié)

 更新時間:2015年03月23日 09:12:42   投稿:junjie  
這篇文章主要介紹了Android中的Activity生命周期總結(jié),本文講解了Activity四大基本狀態(tài)、Activity七大生命周期函數(shù)、切換橫豎屏觸發(fā)的生命周期事件等內(nèi)容,需要的朋友可以參考下

概述

有圖有真相,所以先上圖:

上圖是從Android官網(wǎng)截下的Activity的生命周期流程圖,結(jié)構(gòu)非常清晰,它描述了Activity在其生命周期中所有可能發(fā)生的情況以及發(fā)生的先后順序,下面就將結(jié)合此圖詳細(xì)介紹一下Activity的生命周期。

Activity四大基本狀態(tài)

Activity生命周期一般分為四個基本狀態(tài),分別是活動狀態(tài)(running),暫停狀態(tài)(paused),停止?fàn)顟B(tài)(stopped)和死亡狀態(tài)。

1.活動狀態(tài)(running)

活動狀態(tài)一般是指該Activity正處于屏幕最顯著的位置上顯示,即該Activity是在Android活動棧的最頂端。
一般地當(dāng)Activity 創(chuàng)建后就是處于該狀態(tài)中。
期間觸發(fā)的函數(shù)及順序為: onCreate() ->onStart() -> onResume()。
其中:
onCreate()只有在該Activity是第一次被創(chuàng)建時才會被調(diào)用,主要是負(fù)責(zé)Activity的一般性的初始化設(shè)置,包括視圖的創(chuàng)建,數(shù)據(jù)的綁定等等。需要注意的是若之前有凍結(jié)的state(即系統(tǒng)對該Activity調(diào)用過onSaveInstanceState()函數(shù)),則可以通過其 Bundle 參數(shù)進(jìn)行state恢復(fù)。
onStart()是當(dāng)Activity正在變?yōu)榭梢姞顟B(tài)時才會被調(diào)用。一般地在此期間可以注冊一個廣播等等。
onResume()是在該Activity將要和用戶進(jìn)行交互時被調(diào)用,此時Activity位于的活動棧頂部。

2.暫停狀態(tài)(paused)

暫停狀態(tài)一般指該Activity已失去了焦點但仍然是可見的狀態(tài)(包括部分可見)。一個處于暫停狀態(tài)的Activity只有在系統(tǒng)極度缺乏內(nèi)存資源的情況下才會被系統(tǒng)強制結(jié)束。
運行狀態(tài)到暫停狀態(tài)所觸發(fā)的函數(shù)及順序為:onResume() -> onPuased()。
暫停狀態(tài)恢復(fù)至運行狀態(tài)所觸發(fā)的函數(shù)及順序為:onPuased() -> onResume()。
其中:
onPuased()是當(dāng)一個Activity失去系統(tǒng)焦點后將會被調(diào)用,包括見面被部分遮擋,以及設(shè)備轉(zhuǎn)入休眠狀態(tài)等等。一般地在此期間對一些未保存的數(shù)據(jù)進(jìn)行持久化并停止其他需要耗費CPU的操作,同時不可進(jìn)行耗時操作,否則會阻塞系統(tǒng)UI線程。

3.停止?fàn)顟B(tài)(stopped)

停止?fàn)顟B(tài)一般指該Activity被另一個Activity完全覆蓋的狀態(tài),這是它仍然保持所有的狀態(tài),但是由于該Activity變得不可見,所以系統(tǒng)經(jīng)常會由于內(nèi)存不足而將該Activity強行結(jié)束。
暫停狀態(tài)到停止?fàn)顟B(tài)所觸發(fā)的函數(shù)及順序為:onPuased() -> onStop()。
停止?fàn)顟B(tài)恢復(fù)至運行狀態(tài)所觸發(fā)的函數(shù)及順序為:onStop() -> onRestart() -> onStart() -> onResume()。
其中:
onStop()是當(dāng)一個Activity變?yōu)椴豢梢姇r將會被調(diào)用,此時可能是由于該Activity要被注銷或新的Activity完全遮擋了該Activity。在此期間一般可以進(jìn)行取消注冊廣播等操作,因為用戶不可見。
onRestart()是當(dāng)一個Activity從停止?fàn)顟B(tài)恢復(fù)至運行狀態(tài)時將會被優(yōu)先調(diào)用。

4.死亡狀態(tài)

死亡態(tài)是指該Activity被系統(tǒng)銷毀。當(dāng)一個Activity處于暫停狀態(tài)或停止?fàn)顟B(tài)時就隨處可能進(jìn)入死亡狀態(tài),因為系統(tǒng)可能因內(nèi)存不足而強行結(jié)束該Activity。
停止?fàn)顟B(tài)到死亡狀態(tài)分為兩種情況:(1)由用戶操作導(dǎo)致,則執(zhí)行:onStop() -> onDestroy()。(2)由系統(tǒng)自動強制執(zhí)行,則該Activity被強行結(jié)束。
其中:
onDestroy()是當(dāng)一個Activity正在被系統(tǒng)finished期間被調(diào)用的。

Activity七大生命周期函數(shù)

Activity一共有七個生命周期函數(shù),分別為onCreate(),onRestart(),onStart(),onReusme(),onPause(),onStop(),onDestory()。它們的被調(diào)用的情況以及作用已在上一段中進(jìn)行了相關(guān)的介紹分析,在此就不再贅述。
其實在一個Activity整個生命周期中上述七大生命周期函數(shù)并不是一定都會被執(zhí)行的,有時由于系統(tǒng)內(nèi)存不足的緣故,部分生命周期函數(shù)將會被跳過不執(zhí)行。
一般地onCreate(),onRestart(),onStart(),onReusme()這四個函數(shù)是不能被系統(tǒng)跳過不執(zhí)行的,而onDestory()函數(shù)在系統(tǒng)內(nèi)存不足時,該函數(shù)將直接被系統(tǒng)跳過不執(zhí)行。
onPause()函數(shù)比較特殊,即使在系統(tǒng)內(nèi)存不足時,也一定會執(zhí)行完該函數(shù)后其Activity才會被強制結(jié)束,原因是下一個Activity在等到該函數(shù)結(jié)束前前是不會繼續(xù)進(jìn)行。所以該函數(shù)常常用于對數(shù)據(jù)的持久化操作,同時也禁止進(jìn)行任何耗時的操作。
onStop()函數(shù)則最為特殊,當(dāng)Android的運行環(huán)境為HONEYCOMB即3.0之前的版本時,onStop()函數(shù)是可以被系統(tǒng)跳過不執(zhí)行的。但是在HONEYCOMB即3.0之后的版本,onStop()函數(shù)和onPause()函數(shù)一樣不能被跳過不執(zhí)行。


切換橫豎屏觸發(fā)的生命周期事件

1.不設(shè)置Activity的android:configChanges時,切屏?xí)匦抡{(diào)用各個生命周期,切橫屏?xí)r會執(zhí)行一次,切豎屏?xí)r會執(zhí)行兩次。
2.設(shè)置Activity的android:configChanges=”orientation”時,切屏還是會重新調(diào)用各個生命周期,切橫、豎屏?xí)r只會執(zhí)行一次。
3.在Android3.2之前,設(shè)置Activity的android:configChanges=”orientation|keyboardHidden”時,切屏不會重新調(diào)用各個生命周期,只會執(zhí)行onConfigurationChanged方法。但在Android3.2及其之后,仍會重新調(diào)用各個生命周期一次,因為screen size也開始跟著設(shè)備的橫豎切換而改變。
4.Android3.2及其之后,設(shè)置Activity的android:configChanges=”orientation|keyboardHidden|screenSize“,切屏不會重新調(diào)用各個生命周期,只會執(zhí)行onConfigurationChanged方法。

總結(jié)

關(guān)于Android中四大組件之一Activity的生命周期簡介就先寫到這里了,其實還有很多方面沒介紹到,例如對于onSaveInstanceState()函數(shù)和onRestoreInstanceState()函數(shù)的用法以及與onPause()函數(shù)間的區(qū)別都沒涉及,下次有機會再好好總結(jié),不行了實在是困死了,最后若本文有所疏忽及不當(dāng)之處歡迎大家指正。

相關(guān)文章

  • Android中activity跳轉(zhuǎn)按鈕事件的四種寫法

    Android中activity跳轉(zhuǎn)按鈕事件的四種寫法

    這篇文章主要介紹了Android中activity跳轉(zhuǎn)按鈕事件的四種寫法,下文中包括四個activity的內(nèi)容詳解,非常不錯具有參考借鑒價值,需要的朋友可以參考下
    2016-10-10
  • 詳解RxJava2 Retrofit2 網(wǎng)絡(luò)框架簡潔輕便封裝

    詳解RxJava2 Retrofit2 網(wǎng)絡(luò)框架簡潔輕便封裝

    本篇文章主要介紹了詳解RxJava2 Retrofit2 網(wǎng)絡(luò)框架簡潔輕便封裝,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-12-12
  • Android中Fragment的基本用法示例總結(jié)

    Android中Fragment的基本用法示例總結(jié)

    Fragment是activity的界面中的一部分或一種行為,下面這篇文章主要給大家介紹了關(guān)于Android中Fragment的基本用法的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2018-05-05
  • Android上下文菜單用法實例分析

    Android上下文菜單用法實例分析

    這篇文章主要介紹了Android上下文菜單用法,以完整實例形式分析了Android上下文菜單的定義、布局及功能實現(xiàn)技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-09-09
  • Android之使用Bundle進(jìn)行IPC詳解

    Android之使用Bundle進(jìn)行IPC詳解

    這篇文章主要介紹了Android之使用Bundle進(jìn)行IPC詳解,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-01-01
  • Android中檢測當(dāng)前是否為主線程最可靠的解決方法

    Android中檢測當(dāng)前是否為主線程最可靠的解決方法

    這篇文章主要介紹了Android中檢測當(dāng)前是否為主線程最可靠的解決方法,本文先是給出了最可靠的方法,然后給出了幾個實驗例子,需要的朋友可以參考下
    2015-01-01
  • 適配android7.0獲取文件的Uri的方法

    適配android7.0獲取文件的Uri的方法

    本篇文章主要介紹了適配android7.0獲取文件的Uri的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-09-09
  • 簡單談?wù)勎业腁ndroid屏幕適配之路

    簡單談?wù)勎业腁ndroid屏幕適配之路

    我相信Android碎片化問題是讓所有的Android開發(fā)者都比較頭疼的問題.尤其是屏幕適配這一塊兒.想要自己的app在不同的設(shè)備上面都有一個比較好的顯示效果.就必須做好相應(yīng)的屏幕適配.
    2017-11-11
  • Android 使用自定義RecyclerView控件實現(xiàn)Gallery效果

    Android 使用自定義RecyclerView控件實現(xiàn)Gallery效果

    這篇文章主要介紹了Android 使用自定義RecyclerView 實現(xiàn)Gallery效果,本文給大家簡單介紹了RecyclerView的基本用法,非常不錯,具有參考借鑒價值,需要的朋友可以參考下
    2017-10-10
  • AndroidHttpClient詳解及調(diào)用示例

    AndroidHttpClient詳解及調(diào)用示例

    本文給大家介紹AndroidHttpClient結(jié)構(gòu)、使用方式及調(diào)用示例詳解,需要的朋友可以參考下
    2015-10-10

最新評論