• <noscript id="e0iig"><kbd id="e0iig"></kbd></noscript>
  • <td id="e0iig"></td>
  • <option id="e0iig"></option>
  • <noscript id="e0iig"><source id="e0iig"></source></noscript>
  • 02 安卓開發之生命周期

    標簽: activity的生命周期  android

    1 Activity四種狀態

    Active/Running: 
    Activity處于活動狀態,此時Activity處于棧頂,是可見狀態,可與用戶進行交互。 
    Paused: 
    當Activity失去焦點時,或被一個新的非全屏的Activity,或被一個透明的Activity放置在棧頂時,Activity就轉化為Paused狀態。但我們需要明白,此時Activity只是失去了與用戶交互的能力,其所有的狀態信息及其成員變量都還存在,只有在系統內存緊張的情況下,才有可能被系統回收掉(依然可見)。 
    Stopped: 
    當一個Activity被另一個Activity完全覆蓋時,被覆蓋的Activity就會進入Stopped狀態,此時它不再可見,但是跟Paused狀態一樣保持著其所有狀態信息及其成員變量。 
    Killed: 
    當Activity被系統回收掉時,Activity就處于Killed狀態。 
    Activity會在以上四種形態中相互切換,至于如何切換,這因用戶的操作不同而異。了解了Activity的4種形態后,我們就來聊聊Activity的生命周期

    2 Activity生命周期

    onCreate : 該方法是在Activity被創建時回調,它是生命周期第一個調用的方法,我們在創建Activity時一般都需要重寫該方法,然后在該方法中做一些初始化的操作,如通過setContentView設置界面布局的資源,初始化所需要的組件信息等。 
    onStart : 此方法被回調時表示Activity正在啟動,此時Activity已處于可見狀態,只是還沒有在前臺顯示,因此無法與用戶進行交互。可以簡單理解為Activity已顯示而我們無法看見擺了。 
    onResume : 當此方法回調時,則說明Activity已在前臺可見,可與用戶交互了(處于前面所說的Active/Running形態),onResume方法與onStart的相同點是兩者都表示Activity可見,只不過onStart回調時Activity還是后臺無法與用戶交互,而onResume則已顯示在前臺,可與用戶交互。當然從流程圖,我們也可以看出當Activity停止后(onPause方法和onStop方法被調用),重新回到前臺時也會調用onResume方法,因此我們也可以在onResume方法中初始化一些資源,比如重新初始化在onPause或者onStop方法中釋放的資源。 
    onPause : 此方法被回調時則表示Activity正在停止(Paused形態),一般情況下onStop方法會緊接著被回調。但通過流程圖我們還可以看到一種情況是onPause方法執行后直接執行了onResume方法,這屬于比較極端的現象了,這可能是用戶操作使當前Activity退居后臺后又迅速地再回到到當前的Activity,此時onResume方法就會被回調。當然,在onPause方法中我們可以做一些數據存儲或者動畫停止或者資源回收的操作,但是不能太耗時,因為這可能會影響到新的Activity的顯示——onPause方法執行完成后,新Activity的onResume方法才會被執行。 
    onStop : 一般在onPause方法執行完成直接執行,表示Activity即將停止或者完全被覆蓋(Stopped形態),此時Activity不可見,僅在后臺運行。同樣地,在onStop方法可以做一些資源釋放的操作(不能太耗時)。 
    onRestart :表示Activity正在重新啟動,當Activity由不可見變為可見狀態時,該方法被回調。這種情況一般是用戶打開了一個新的Activity時,當前的Activity就會被暫停(onPause和onStop被執行了),接著又回到當前Activity頁面時,onRestart方法就會被回調。 
    onDestroy :此時Activity正在被銷毀,也是生命周期最后一個執行的方法,一般我們可以在此方法中做一些回收工作和最終的資源釋放。 
    下面我們通過程序來驗證上面流程中的幾種比較重要的情況,同時觀察生命周期方法的回調時機。 

    3 驗證幾個主要的生命周期情況

    (1)啟動活動

    2020-05-08 12:00:16.259 5884-5884/? D/MainActivity: onCreate is invoke!!!
    2020-05-08 12:00:16.269 5884-5884/? D/MainActivity: onStart is invoke!!!
    2020-05-08 12:00:16.272 5884-5884/? D/MainActivity: onResume is invoke!!!

    (2)按HOME鍵

    2020-05-08 12:02:08.960 5884-5884/com.example.activitylifecycle D/MainActivity: onPause is invoke!!!
    2020-05-08 12:02:09.797 5884-5884/com.example.activitylifecycle D/MainActivity: onStop is invoke!!!

    (3)重新打開應用

    2020-05-08 12:03:14.192 5884-5884/com.example.activitylifecycle D/MainActivity: onRestart is invoke!!!
    2020-05-08 12:03:14.196 5884-5884/com.example.activitylifecycle D/MainActivity: onStart is invoke!!!
    2020-05-08 12:03:14.197 5884-5884/com.example.activitylifecycle D/MainActivity: onResume is invoke!!!

    (4)原有的基礎上打開新的Activity

    2020-05-08 12:04:23.468 5884-5884/com.example.activitylifecycle D/MainActivity: onPause is invoke!!!
    2020-05-08 12:04:24.037 5884-5884/com.example.activitylifecycle D/MainActivity: onStop is invoke!!!

    在原Activity的基礎上開啟新的Activity,原Activity生命周期執行方法順序為–>onPause()–>onStop(),事實上跟點擊home鍵是一樣的。但是這里有點要注意的是如果新的Activity使用了透明主題,那么當前Activity不會回調onStop方法。同時我們發現新Activity(SecondActivity)生命周期方法是在原Activity的onPause方法執行完成后才可以被回調,這也就是前面我們為什么說在onPause方法不能操作耗時任務的原因了。假設:在一個activity啟動模式為singleTop且本身在前臺時,再次啟動當前activity的生命周期如下:onPause()->onNewIntent->onResume 。

    (5)點擊back按鈕時

    2020-05-08 12:10:00.398 5884-5884/com.example.activitylifecycle D/MainActivity: onPause is invoke!!!
    2020-05-08 12:10:01.056 5884-5884/com.example.activitylifecycle D/MainActivity: onStop is invoke!!!
    2020-05-08 12:10:01.057 5884-5884/com.example.activitylifecycle D/MainActivity: onDestroy is invoke!!!

    從Log我們可以看出,當點擊Back鍵回退時,相當于退出了當前Activity,Activity將被銷毀,因此 ,退出當前Activity時–>onPause()–>onStop()–>onDestroy()依次被調用。

    小結:到這里我們來個小結,當Activity啟動時,依次會調用onCreate(),onStart(),onResume(),而當Activity退居后臺時(不可見,點擊Home或者被新的Activity完全覆蓋),onPause()和onStop()會依次被調用。當Activity重新回到前臺(從桌面回到原Activity或者被覆蓋后又回到原Activity)時,onRestart(),onStart(),onResume()會依次被調用。當Activity退出銷毀時(點擊back鍵),onPause(),onStop(),onDestroy()會依次被調用,到此Activity的整個生命周期方法回調完成。現在我們再回頭看看之前的流程圖,應該是相當清晰了吧。嗯,這就是Activity整個典型的生命周期過程。下篇我們再來聊聊Activity的異常生命周期。 

    補充:滅屏時,onPause()和onStop()會依次被調用
    屏亮時,onRestart(),onStart(),onResume()會依次被調用。

     

     

    版權聲明:本文為weixin_44342753原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接和本聲明。
    本文鏈接:https://blog.csdn.net/weixin_44342753/article/details/105992248

    智能推薦

    linux-進程-02-進程的生命周期

    進程的整個生命周期如下: 一個進程被fork出來后,進入就緒態;當被調度到獲得CPU執行時,進入執行態;如果時間片用完或被強占時,進入就緒態;資源得不到滿足時,進入睡眠態(深度睡眠或淺度睡眠),比如一個網絡程序,在等對方發包,此時不能占著CPU,進入睡眠態,當包發過來時,進程被喚醒,進入就緒態;如果被暫停,進入停止態;執行完成后,資源釋放,此時父進程wait4還未收到它的信號,進入僵死態。 即整個...

    Vue03-組件02:組件的生命周期

    2 組件的生命周期 組件生命周期指的是組件從創建到銷毀的過程,在這個過程中的一些不同的階段,vue 會調用指定的一些組件方法。 基本生命周期函數有下面幾個階段: 創建階段 掛載階段 更新階段 卸載階段 其它 每一個階段都對應著 之前 和 之后 兩個函數。 2-1 創建階段 beforeCreate() 在實例初始化之后,數據觀測 (data observer) 和 event/watcher 事件...

    【RN基礎02】React Native生命周期完全解析

    生命周期就像頁面的加載到關閉的這個過程,下面我將詳細給大家介紹組件的生命周期 生命周期圖 案列 效果圖 進入頁面打印日志 加載階段 點擊我日志 - 點擊讓他死亡模擬卸載 --------componentWillUnmount組件移除前調用--------------- 讓他重生就回到加載階段 項目源碼 定義組件 setup使用組件...

    vue總結02--vue的生命周期

    什么是生命周期? 每個 Vue 實例在被創建時都要經過一系列的初始化過程——例如,需要設置數據監聽、編譯模板、將實 例掛載到 DOM 并在數據變化時更新 DOM 等,稱為Vue實例的生命周期。 文章目錄 什么是生命周期? 生命周期視圖 一、使用場景 二、測試代碼 生命周期視圖 結論: 三個階段:初始化、更新、銷毀 初始化:beforeCreate、created、befor...

    Vue速成day02-Vue生命周期解讀

    首先大家需要知道什么叫做生命周期,生命周期指的是:Vue實例化創建到銷毀的整個過程 了解Vue生命周期首先看一下Vue官方給的生命周期的圖吧! 單詞不會建議大家下載一個有道詞典,重點查一下那些紅框內的單詞! 看完這張圖,是不是感覺若有所思,分析一下: 首先圖片最清晰的就是紅框里的單詞,這8個狀態正式Vue內部從創建到銷毀的整個過程, 如果你剛接觸Vue肯定會有一個疑問!!! 在控制臺如果獲取 會發...

    猜你喜歡

    HTML中常用操作關于:頁面跳轉,空格

    1.頁面跳轉 2.空格的代替符...

    freemarker + ItextRender 根據模板生成PDF文件

    1. 制作模板 2. 獲取模板,并將所獲取的數據加載生成html文件 2. 生成PDF文件 其中由兩個地方需要注意,都是關于獲取文件路徑的問題,由于項目部署的時候是打包成jar包形式,所以在開發過程中時直接安照傳統的獲取方法沒有一點文件,但是當打包后部署,總是出錯。于是參考網上文章,先將文件讀出來到項目的臨時目錄下,然后再按正常方式加載該臨時文件; 還有一個問題至今沒有解決,就是關于生成PDF文件...

    電腦空間不夠了?教你一個小秒招快速清理 Docker 占用的磁盤空間!

    Docker 很占用空間,每當我們運行容器、拉取鏡像、部署應用、構建自己的鏡像時,我們的磁盤空間會被大量占用。 如果你也被這個問題所困擾,咱們就一起看一下 Docker 是如何使用磁盤空間的,以及如何回收。 docker 占用的空間可以通過下面的命令查看: TYPE 列出了docker 使用磁盤的 4 種類型: Images:所有鏡像占用的空間,包括拉取下來的鏡像,和本地構建的。 Con...

    requests實現全自動PPT模板

    http://www.1ppt.com/moban/ 可以免費的下載PPT模板,當然如果要人工一個個下,還是挺麻煩的,我們可以利用requests輕松下載 訪問這個主頁,我們可以看到下面的樣式 點每一個PPT模板的圖片,我們可以進入到詳細的信息頁面,翻到下面,我們可以看到對應的下載地址 點擊這個下載的按鈕,我們便可以下載對應的PPT壓縮包 那我們就開始做吧 首先,查看網頁的源代碼,我們可以看到每一...

    精品国产乱码久久久久久蜜桃不卡