1. 程式人生 > >Android Activity生命週期--應知應會

Android Activity生命週期--應知應會

1. 摘要

2. Android生命週期


3. Activity何時被銷燬?onPause() vs onStop() vs onDestroy()

        Android 3.0(HONEYCOMB API 11)之前,onPause()肯定會被呼叫,但onStop()和onDestroy()不一定會被呼叫。Android 3.0之後,onPause()肯定會被呼叫,onStop()也肯定會被呼叫,但onDestroy()有可能不會呼叫。(谷歌官網文件給出的標準,應該不會錯的)

4. onSaveInstanceState(Bundle) onRestoreInstanceState(Bundle) 及 onCreate(Bundle)

        當Android系統認為Activity之後還會被使用,但現在不得不把它殺死,會呼叫onSaveInstanceState(Bundle)。比如,Activity回到後臺;設定切換語言等。在Bundle中儲存的引數,在onCreate(Bundle)和onRestoreInstanceState都可以取得。

        onSaveInstanceState(Bundle)將會在onStop()之前被呼叫,但Android系統不保證它是否是在onPause()還是之後被呼叫。雖然,實驗的時候,每次都是在onPause()之後被呼叫。但谷歌文件這樣說,實際產品中,不應認為onSaveInstanceState(Bundle)一定會在onPause()之後被呼叫。

        在onCreate(Bundle)中,當onSaveInstanceState(Bundle)未被呼叫時,經常會傳一個Bundle為空值。所以,在實際的產品中,總是對Bundle進行空值檢查。

        在onRestoreInstanceState(Bundle)被呼叫時,Bundle不會為空值,因為只有onSaveInstanceState(Bundle)被呼叫後,它才會被呼叫。onRestoreInstaceState(Bundle)會在onStart()和onPostCreate(Bundle)之間被呼叫。onPostCreate(Bundle)通常不會被應用開發者使用到。onPostCreate(Bundle)會在onResume()之前被呼叫。onRestoreInstanceState(Bundle)在

onSaveInstanceState(Bundle)被呼叫之後,不一定會被呼叫的。

        這個圖比較能說明問題[3]。


5. onSaveInstanceState(Bundle) vs onSaveInstanceState(Bundle, PersistableBundle)

        API 21(Android 5.0 Lollipop)中引入的。需要在Activity中設定persistable屬性為persistAcrossReboots。

        <activity
            android:persistableMode="persistAcrossReboots"
            android:name=".MainActivity">
        </activity>
onSaveInstanceState(Bundle, PersistableBundle)對應的有onCreate(Bundle, PersistableBundle)和onRestoreInstanceState(Bundle, PersistableBundle)。

與之前不同的是,在實驗中,onRestoreInstanceState的回撥引數,有時會有null值。而且,onRestoreInstanceState(Bundle, PersistableBundle)

和onSaveInstanceState(Bundle, PersistableBundle)也不一定成對出現。

6. onConfigurationChanged(Configuration)

        在activity中設定該屬性,可以避免一些Activity的重建,而改為回撥onConfigurationChanged(Configuration)。

        <activity
            android:configChanges="orientation"
            android:name=".MainActivity">
        </activity>
        支援的屬性有:orientation、fontScale、keyboard、keyboardHidden、layoutDirection、locale、navigation、screenLayout、touchscreen、uiMode、smallestScreenSize、density、screenSize。可以使用“|”進行組合。比如,"orientation|screenSize"可以避免橫豎屏切換時,Activity進行重建,而呼叫onConfigurationChanged(Configuration)。

7. onLowMemory() and onTrimMemory(int)

        當Android系統記憶體不夠時,會呼叫它們,以便於Activity在被銷燬前,可以得到回撥。onLowMemory()在API 1(Android 1.0)就已經存在,而onTrimMemory(int)是在API 14(Android 4.0 - 4.0.2 Ice Cream Sandwich)加入的。

8. 總結

        本文以Activity週期為起點和線索,介紹了一些Activity週期相關的重要知識。部分內容來源於谷歌官方文件;部分內容來源於作者的實踐和積累;部分內容來源於其它書籍和部落格。本文以Activity生命週期為主線,同時對其進行衍生。之後,有關Activity生命週期有關的知識,會對部落格進行持續更新。

9. 引用

[2] 《Android開發藝術探索》

相關推薦

Android Activity生命週期--

1. 摘要 2. Android生命週期 3. Activity何時被銷燬?onPause() vs onStop() vs onDestroy()         Android 3.0(HONEYCOMB API 11)之前,onPause()肯定會被呼叫,但o

Android-Activity生命週期

MainActivity程式碼: package liudeli.activity; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.util.L

(Android) Activity 生命週期

Activity 生命週期 生命週期方法 呼叫時機 OnCreate 在 Activity 物件被第一次建立時呼叫,及通常用來做程式的初始化動作。 On

Android activity生命週期

Android activity的生命週期總共有以下方法:onCreate()  onStart()  onResume()  onPause()   onStop()  onDestory()  onRestart()。 onCreate():App執行時,首次被呼叫,且

Android----Activity生命週期

Android中是通過Activity棧來管理創建出的Activity,當一個新的Activity被啟動時,這個新的Activity就會被加入到Activity棧的棧頂,同時呈現到使用者前臺,供使用者互動,原來的棧頂元素被壓入到第二位置,但是它的狀態資訊還儲存著。  o

[Android]Activity生命週期+啟動模式

Activity是一個與使用者互動的介面。 一、Activity生命週期  1.Activity的4種狀態      Active  Paused  Stopped  killed Active:當前

android Activity生命週期總結

是什麼? acntivity是一組包含使用者介面的元件,主要用於和使用者進行互動的。也就是使用者看得到的東西就是activity。 Activity是怎麼回退的: android是使用任務task去

android activity 生命週期簡介

activity 生命週期有6個過程  onCreate(Bundle savedInstanceState) --》   onStart()  --》onResume()  --》onPause() --》onStop() -->onDestroy() 其中前3個 

Android Activity生命週期及狀態變化所呼叫方法

Activity在建立到銷燬有三個狀態,分別為執行狀態、暫停狀態、停止狀態。在不同狀態相互切換時會觸發一些事件,執行一些回撥方法來通知狀態的變化。 方法 描述 void onCreat

Android Activity生命週期都該做哪些事情?

Android系統根據生命週期的不同階段喚起對應的回撥函式來執行程式碼。系統存在啟動與銷燬一個activity的一套有序的回撥函式。本節來討論下不同生命週期的回撥函式裡都該做哪些事情,不該做哪些事情。 理解生命週期的回撥 在一個activity的生命週期

Android activity 生命週期總結

Activity生命週期的七個方法 void onCreate(Bundle savedInstanceState) // Activity建立時 void onStart() // activity對使用者可見時 void onRestart() /

Android Activity生命週期詳解

Activity作為Android的四大元件之一,非常的重要,也是最常用的四大元件,使用Activity必須要在AndroidManifest中進行註冊,那麼作為Android的基礎,Activity的

Android-Activity生命週期筆記

Android 4個狀態  活動狀態. 當前Activity位於前臺,使用者課件,可以獲得焦點. 暫停狀態. 其他Actitvity位於前臺,該Activity依然可見,至是不能獲得焦點. 停止狀態. 該Activity不可見,失去焦點. 銷燬狀態.該Activity結束,

兩分鐘徹底讓你明白Android Activity生命週期(圖文)!

大家好,今天給大家詳解一下Android中Activity的生命週期,我在前面也曾經講過這方面的內容,但是像網上大多數文章一樣,基本都是翻譯Android API,過於籠統,相信大家看了,會有一點點的幫助 ,但是還不能完全吃透,所以我今天特意在重新總結一下. 首先看一下And

關於對Android Activity 生命週期的7個方法的理解

首先明確一個activity有三種狀態,執行狀態,暫停狀態,停止狀態。       activity啟動的時候:經過onCreate ,onStart,onResume 後,activity才處於執行狀態。       現在重點說明onPause,onStop,onDestory; 以及恢復的時候,什麼時候o

Android Activity 生命週期研究記錄

        Android Activity的生命週期分析,網上一抓就是一大把,但是總感覺太泛泛而談,重複東西太多了。最近收到這樣的需求:產品經理要求app的部分設定在使用者退出app後再次進入app時,這部分設設定回覆預設值,但是,如果使用者在應用中切換Activit

android ---Activity生命週期

Activity是應用程式的表現層,一個運用程式可以包含多個Activity,一個Activity包含一個layout,他們之間可以跳轉。 首先介紹一下Activity棧:棧大家應該都瞭解,先進後出

android橫豎屏切換,activity生命週期方法是否回撥

預設情況下的一個應用,沒有在androidmainfest檔案進行任何設定一切都是預設的情況下,我們當改變了他的orientation時候是會銷燬當前activity,新建一個新的activity public void orien(View view)

網絡駭客入門之網絡編程(一):網絡

網絡網絡駭客入門之網絡編程(一):網絡應知應會一、計算機網絡在設計之初就決定了它結構簡單,傳輸可靠的特點,除此之外,它還能連接不同種類的計算機在網絡上,各個節點同等重要且必須有冗余路由二、網絡在理論上被分為七層,從下到上,物理層,數據鏈路層,網絡層,傳輸層,會話層,表示層,應用層在實際的應用上分為四層,即:鏈

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

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