1. 程式人生 > >【Android歸納】Activity生命週期-基於實驗的最新總結

【Android歸納】Activity生命週期-基於實驗的最新總結

不說太多廢話,先上兩張最基本的圖吧


簡單說明一下: 1. onCreate()
它會在活動第一次被建立的時候呼叫。你應該在這個方法中完成活動的初始化操作,比如說載入布
局、繫結事件等。
2. onStart()
這個方法在活動由不可見變為可見的時候呼叫。
3. onResume()
這個方法在活動準備好和使用者進行互動的時候呼叫。此時的活動一定位於返回棧的
棧頂,並且處於執行狀態。
4. onPause()
這個方法在系統準備去啟動或者恢復另一個活動的時候呼叫。我們通常會在這個方
法中將一些消耗 CPU 的資源釋放掉,以及儲存一些關鍵資料,但這個方法的執行速度
一定要快,不然會影響到新的棧頂活動的使用。
5. onStop()

這個方法在活動完全不可見的時候呼叫。它和 onPause()方法的主要區別在於,如
果啟動的新活動是一個對話方塊式的活動,那麼 onPause()方法會得到執行,而 onStop()
方法並不會執行。
6. onDestroy()
這個方法在活動被銷燬之前呼叫,之後活動的狀態將變為銷燬狀態。
7. onRestart()
這個方法在活動由停止狀態變為執行狀態之前呼叫,也就是活動被重新啟動了
8. onSaveInstanceState: 當某個activity變得“容易”被系統銷燬時,該activity的onSaveInstanceState就會被執行,除非該activity是被使用者主動銷燬的,例如當用戶按BACK鍵的時候。

注意上面的雙引號,何為“容易”?言下之意就是該activity還沒有被銷燬,而僅僅是一種可能性。這種可能性有哪些
1、如下場景2 :一個正常的activity啟動 ,然後按home鍵(或者長按home鍵啟動其它程式) 2、如下場景3:一個正常的activity啟動,然後按電源鍵關閉螢幕顯示 3、如下場景5:啟動一個新的Activity 4、如下場景6:橫豎屏切換 總而言之,onSaveInstanceState的呼叫遵循一個重要原則,即當系統“未經你許可”時銷燬了你的activity,則onSaveInstanceState會被系統呼叫,這是系統的責任,因為它必須要提供一個機會讓你儲存你的資料(當然你不儲存那就隨便你了)。
9. onRestoreInstanceState: 需要注意的是,onSaveInstanceState方法和onRestoreInstanceState方法“不一定”是成對的被呼叫的,onRestoreInstanceState被呼叫的前提是,activity A“確實”被系統銷燬了(參考場景6),而如果僅僅是停留在有這種可能性的情況下,則該方法不會被呼叫,例如,當正在顯示activity A的時候,使用者按下HOME鍵回到主介面,然後使用者緊接著又返回到activity A,這種情況下activity A一般不會因為記憶體的原因被系統銷燬,故activity A的onRestoreInstanceState方法不會被執行。 另外,onRestoreInstanceState的bundle引數也會傳遞到onCreate方法中,你也可以選擇在onCreate方法中做資料還原
場景驗證: 場景1、一個正常的activity從啟動到銷燬(back),橢圓是啟動,方塊中是銷燬
場景2、一個正常的activity啟動 ,然後按home鍵(或者長按home鍵啟動其它程式)

再重新啟動

場景3、一個正常的activity啟動,然後按電源鍵鎖屏,然後在開啟螢幕解鎖平(發現其實和按home鍵一樣)

場景4、一個正常的activity啟動,然後下拉狀態列,生命週期不變

此時,點選通知欄中的通知進入到別的應用,然後再返回

場景5、點選MainActivity中的按鈕進入下一個Activity(名字為ActivityOne),然後再返回 分兩種情況: 第一種:

第二種:


場景6不設定Activity的android:configChanges時,切屏會重新呼叫各個生命週期,切橫屏時會執行一次,切豎屏也只執行一次


場景7、設定Activity的configChanges為“orientation|keyboardHidden|screenSize”時,       切屏不會重新呼叫各個生命週期,只會執行onConfigurationChanged方法 注意:       自從Android 3.2(API 13),screen size也開始跟著裝置的橫豎切換而改變。所以, 在AndroidManifest.xml裡設定的MiniSdkVersion和 TargetSdkVersion屬性大於等於13的情況下,

如果你想阻止程式在執行時重新載入Activity,除了設定”orientation“,你還必須設定"ScreenSize"。

4.2的話,如果有問題可以再加上一個"layoutDirection"測試

總結: 其實網上關於Activity生命週期的知識很多,但是大部分內容要麼不全,要麼已經過時,現基於已有內容,做了部分歸納更正,希望可以方便大家學習,歡迎評論拍磚 相關連結:

相關推薦

Android歸納Activity生命週期-基於實驗最新總結

不說太多廢話,先上兩張最基本的圖吧 簡單說明一下: 1. onCreate()它會在活動第一次被建立的時候呼叫。你應該在這個方法中完成活動的初始化操作,比如說載入布局、繫結事件等。2. onS

Android歸納Activity啟動模式

1、對於使用standard 模式的活動,系統不會在乎這個活動是否已經在返回棧中存在,每次啟動都會建立該活動的一個新的例項。 例如A啟動A,A再接著啟動A,A繼續啟動A,然後再分別出棧,如圖所示

Android 深刻理解Activity生命週期的作用及意義

前言    Activity生命週期是研究Android開發最基礎的知識點之一,熟練掌握生命週期的特性可以在實際開發中避免踩坑。比如,一些UI的初始化和回收操作、框架庫的註冊於反註冊(摧毀)、執行緒的啟動和停止等。另外,本文在最後章節還會講解系統回收造成的問題。本文就是針對各

實驗一 第一個Android程式和Activity生命週期

實驗一 第一個Android程式和Activity生命週期 實驗目的 實驗要求 工程程式碼 實驗目的 生成執行第一個Android程式,熟悉瞭解Android手機開發平臺的基本構成和使用方法,熟悉Android應用

android四大元件--Activity生命週期

在android系統中Activity作為Activity棧(Stack)被管理,當前活動的Activity處於棧頂,之前的非活動Activity被壓入下面成為非活動Activity,等待是否可能被恢復為活動狀態。 在上圖中我們可以將Activity的生命週期分為以下

Android中的Activity生命週期

       說到生命週期,對於程式設計師來說並不陌生。如果學過Servlet的朋友,就更不會陌生了餓,其實差不多,android的生命週期與Servlet的生命週期有相似之處 。             Android的生命週期通常是有這樣幾個方法構成:onCreate()、onStart()、onPau

Android專案中Activity生命週期高效的管理方式

Activity生命週期的管理方式   在我們的開發過程中,有時候要操作Activity的全域性生命週期,故我們需要儲存Activity的生命週期,以及進行管理。如何進行存放Activity的生命週期呢? 工具類下載地址:http://download.cs

Android問題:Activity生命週期事件

四狀態:活躍、暫停、停止、銷燬。 當Android中Activity在執行的時候,Activity的活動狀態由Android和Activity棧的形式管理。當前活動的Activity位於棧頂。 隨著不同應用的執行,每個Activity都可能在活動狀態和非活動狀態之間切換。

Android基礎:Activity生命週期細化

一、   細化Activity的生命週期         在進行Android應用開發的時候,需要考慮如何使用Activity的生命週期中的方法使得程式符合使用者的期望且在activity不需要的時候不會導致系統資源的浪費。下面從activity的啟動和銷燬、暫停和恢復、

Android 開發 : Activity之間傳遞資料的幾種方式

在Android開發中,我們通常需要在不同的Activity之間傳遞資料,下面我們就來總結一下在Activity之間資料傳遞的幾種方式。 1. 使用Intent來傳遞資料 Intent表示意圖,很多時候我們都會利用Android的Intent來在各個A

Android基礎Activity深入理解(二)——Activity棧和載入模式

之前的一篇文章中詳細說明了Activity的生命週期,說明了Activity中的回撥方法是如何被觸發的。在使用者使用App時,每一個 Activity 都處於某一個狀態,對於開發者來說,是無法控制其應用程式處於某一個狀態的,這些均由系統來完成。那麼Activit

架構分析Android鎖屏與Activity生命週期的變化

概述 Android開機啟動後預設會先進入鎖屏然後滅屏休眠, 本文旨在介紹這個過程中最先啟動的Home Launch Activity (其實在Android N上最早被啟動的是Settings中的FallbackHome Activity) 如何發生相關的生命週期變化, 以及AMS

AndroidFragmentFragment生命週期

Fragment每個生命週期方法的意義、作用(注意紅色的不是生命週期方法):setUserVisibleHint():設定Fragment可見或者不可見時會呼叫此方法。在該方法裡面可以通過呼叫getUserVisibleHint()獲得Fragment的狀態是可見還是不可見的,如果可見則進行懶載入操作。onA

Android基礎利用Intent在Activity之間傳遞數據

一次 there center ack and block for success display 前言: 上一篇文章給大家聊了Intent的使用方法。怎樣用Intent啟動Activity和隱式Intent。這一篇文章給大家聊聊怎樣利用Intent在Activit

Android 開發:(六)Activity生命週期以及函式意義

簡述:   1.在日常應用中Activity是與使用者互動的介面,它提供了一個使用者完成相關操作的視窗。當我們在開發中建立Activity後,通過呼叫setContentView(View)方法來給該Activity指定一個佈局介面,而這個介面就是提供給使用者互動的介面。Androi

Android核心技術-day06-05-Activity生命週期,應用場景

package com.gaozewen.lifecycle; import android.content.Intent; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import an

AndroidActivity生命週期簡介

概述 有圖有真相,所以先上圖: 上圖是從Android官網截下的Activity的生命週期流程圖,結構非常清晰,它描述了Activity在其生命週期中所有可能發生的情況以及發生的先後順序,下面就將結合此圖詳細介紹一下Activity的生命週期。 --- --- Activity四大

Android apk動態載入機制的研究(二) 資源載入和activity生命週期管理

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

Android架構基於MVP模式的Retrofit2+RXjava封裝之常見問題(四)

###先回顧下之前的 【Android架構】基於MVP模式的Retrofit2+RXjava封裝(一) 【Android架構】基於MVP模式的Retrofit2+RXjava封裝之檔案下載(二) 【Android架構】基於MVP模式的Retrofit2+RXjava封裝之檔案上傳(三)

Android架構基於MVP模式的Retrofit2+RXjava封裝(一)

#最近有個新專案要做,搭建框架的時候,順便梳理了下MVP模式,特此記錄,歡迎大家指正。 專案地址GitHub 一 、首先是依賴 compile 'com.google.code.gson:gson:2.8.0' compile 'com.squareup.ok