1. 程式人生 > >Android:Activity——生命週期深入詳解

Android:Activity——生命週期深入詳解

一、生命週期全面分析

Android活動預設執行在當前程序所擁有的棧中,前臺可見的活動則在活動棧的最頂部。其他後臺活動則在棧的裡面,在正常的情況下(記憶體充足)其他的活動並沒有被回收或者殺死,它們仍然存在於棧中保持著原來的狀態。當前面的活動退出後,後面的活動就會搬到前臺使得被使用者可見。如果在非正常情況下(記憶體緊張、按下Home鍵後右啟動其他應用)那麼棧內的非前臺Activity就可能被回收,但是當我們返回到該Activity時它又會被重新構造,並且會通過onSaveInstance和onRestoreInstance載入原來的資料使得它保持之前的狀態呈現給使用者。無論是正常情況,還是非正常情況下,這樣的實現都是基於一個非常重要的機制——生命週期。

1.什麼是生命週期

週期即活動從開始到結束所經歷的各種狀態。生命週期即活動從開始到結束所經歷的各個狀態。從一個狀態到另一個狀態的轉變,從無到有再到無,這樣一個過程中所經歷的狀態就叫做生命週期。

  • Acitivity本質上有四種狀態

    1. 執行:如果一個活動被移到了前臺(活動棧頂部)。
    2. 暫停:如果一個活動被另一個非全屏的活動所覆蓋(比如一個Dialog),那麼該活動就失去了焦點,它將會暫停(但它仍然保留所有的狀態和成員資訊,並且仍然是依附在WindowsManager上),在系統記憶體積極缺乏的時候會將它殺死。
    3. 停止:如果一個活動被另一個全屏活動完全覆蓋,那麼該活動處於停止狀態(狀態和成員資訊會保留,但是Activity已經不再依附於WindowManager了)。同時,在系統缺乏資源的時候會將它殺死(它會比暫停狀態的活動先殺死)。
    4. 重啟:如果一個活動在處於停止或者暫停的狀態下,系統記憶體缺乏時會將其結束(finish)或者殺死(kill)。這種非正常情況下,系統在殺死或者結束之前會呼叫onSaveInstance()方法來儲存資訊,同時,當Activity被移動到前臺時,重新啟動該Activity並呼叫onRestoreInstance()方法載入保留的資訊,以保持原有的狀態。

在上面的四中常有的狀態之間,還有著其他的生命週期來作為不同狀態之間的過度,用於在不同的狀態之間進行轉換,生命週期的具體說明見下。

二、各個生命週期狀態的說明

1.正常情況下的生命週期

  1. onCreate:與onDestroy配對,表示Activity正在被建立,這是生命週期的第一個方法。在這個方法中可以做一些初始化的工作(載入佈局資源、初始化Activity所需要的資料等),耗時的工作在非同步執行緒上完成。

  2. onRestart:表示Activity正在重新啟動。一般情況下,在當前Activity從不可見重新變為可見的狀態時onRestart就會被呼叫。這種情形一般是由於使用者的行為所導致的,比如使用者按下Home鍵切換到桌面或者打開了一個新的Activity(這時當前Activity會暫停,也就是onPause和onStop被執行),接著使用者有回到了這個Activity,就會出現這種情況。

  3. onStart:與onStop配對,表示Activity正在被啟動,並且即將開始。但是這個時候要注意它與onResume的區別。兩者都表示Activity可見,但是onStart時Activity還正在載入其他內容,正在向我們展示,使用者還無法看到,即無法互動。

  4. onResume:與onPause配對,表示Activity已經建立完成,並且可以開始活動了,這個時候使用者已經可以看到介面了,並且即將與使用者互動(完成該週期之後便可以響應使用者的互動事件了)。

  5. onPause:與onResume配對,表示Activity正在暫停,正常情況下,onStop接著就會被呼叫。在特殊情況下,如果這個時候使用者快速地再回到當前的Activity,那麼onResume會被呼叫(極端情況)。一般來說,在這個生命週期狀態下,可以做一些儲存資料、停止動畫的工作,但是不能太耗時,如果是由於啟動新的Activity而喚醒的該狀態,那會影響到新Activity的顯示,原因是onPause必須執行完,新的Activity的onResume才會執行。

  6. onStop:與onStart配對,表示Activity即將停止,可以做一些稍微重量級的回收工作,同樣也不能太耗時(可以比onPause稍微好一點)。

  7. onDestroy:與onCreate配對,表示Activity即將被銷燬,這是Activity生命週期的最後一個回撥,我們可以做一些回收工作和最終的資源釋放(如Service、BroadReceiver、Map等)。

    正常情況下,Activity的常用生命週期就是上面的7個,下圖更加詳細的描述的各種生命週期的切換過程:

    這裡寫圖片描述

這裡要說的是,從上圖我們可以看到一個現象:
onStart與onStop、onResume與onPause是配對的。兩種Activity回到前臺的方式,從onPause狀態回到前臺會走到onResume狀態,從onStop狀態回到前臺會到onStart狀態,這是從是否可見和是否在前臺來說的。從是否可見來說,onStart和onStop是配對的;從是否在前臺來說,onResume和onPause是配對的。至於為什麼會有他們,在第三點生命週期的使用會說到。

我們來看看正常情況下生命週期的系統日誌:

03-23 00:15:52.970 32278-32278/com.example.david.lifecircle E/TAG: onCreate() is invoked!
03-23 00:15:52.971 32278-32278/com.example.david.lifecircle E/TAG: onStart() is invoked!
03-23 00:15:52.971 32278-32278/com.example.david.lifecircle E/TAG: onResume() is invoked!
03-23 00:15:55.858 32278-32278/com.example.david.lifecircle E/TAG: onPause() is invoked!
03-23 00:16:02.573 32278-32278/com.example.david.lifecircle E/TAG: onRestart() is invoked!
03-23 00:16:02.573 32278-32278/com.example.david.lifecircle E/TAG: onStart() is invoked!
03-23 00:16:02.573 32278-32278/com.example.david.lifecircle E/TAG: onResume() is invoked!
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

2.異常情況下的生命週期

一般正常情況的宣告週期就像上面所說的一樣,但是因為Android本身記憶體或者其他的一些情況會使得Activity不按照正常的生命週期。比如當資源配置發生改變、系統記憶體不足時,Activity就會被殺死。下面分析這兩種常見的情況。
  • 1
  • 2
  • 情況1:資源相關的系統配置發生改變導致Activity被殺死並重新建立

    理解這個問題,我們首先要對系統的資源載入機制有一定了解,不過這裡我不分析系統資源載入機制了(因為我也不怎麼懂)。簡單說明一下,就像是我們把一張圖片放在drawable目錄之後,就可以通過Resources去獲取這張圖片。同時為了相容不同的裝置,我們還可能需要在其他的一些目錄放置不同的圖片,比如 drawable-mdpi、drawable-hdpi等。這樣,當應用程式啟動時,系統就會根據當前裝置的情況去載入合適的Resource資源,比如說橫屏和豎屏的手機會拿到兩張不同的圖片(設定了landscape或portrait狀態下的圖片)。
    如果說,當前Activity處於豎屏狀態,如果突然旋轉螢幕,由於系統配置發生了改變,在預設情況下,Activity就會被銷燬並重新建立(當然我們也可以組織系統重新建立,具體就在Mainfest中申明android:Configchanges=屬性即可)。

    異常情況下的呼叫流程:

    1. 呼叫onSaveInstance儲存當前Activity狀態。注意,它與onPause方法沒有先後之分。
    2. 呼叫onStop方法做後續處理。
    3. 呼叫onDestroy方法銷燬當前活動。
    4. 重新onCreate該活動。
    5. 呼叫onStart方法之後,再呼叫onRestoreInstance方法載入儲存的資料。
    6. 接下來就與正常的一樣了,呼叫onResume,然後執行。

    我們來看一下生命週期異常執行的系統日誌:

03-23 00:19:23.480 26457-26457/com.example.david.lifecircle E/TAG: onCreate() is invoked!
03-23 00:19:23.481 26457-26457/com.example.david.lifecircle E/TAG: onStart() is invoked!
03-23 00:19:23.481 26457-26457/com.example.david.lifecircle E/TAG: onResume() is invoked!
03-23 00:19:51.323 26457-26457/com.example.david.lifecircle E/TAG: onPause() is invoked!
03-23 00:19:51.324 26457-26457/com.example.david.lifecircle E/TAG: onSaveInstanceState() is invoked!  Save Text = Save Data
03-23 00:19:51.478 26457-26457/com.example.david.lifecircle E/TAG: onCreate() is invoked!
03-23 00:19:51.488 26457-26457/com.example.david.lifecircle E/TAG: onStart() is invoked!
03-23 00:19:51.490 26457-26457/com.example.david.lifecircle E/TAG: onRestoreInstanceState() is invoked!  Recover Text = Save Data
03-23 00:19:51.490 26457-26457/com.example.david.lifecircle E/TAG: onResume() is invoked!
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 情況2:資源記憶體不足導致低優先順序的Activity被殺死

    這種情況不好模擬,但是其資料儲存和恢復過程和情況1完全一致,這裡簡單的描述一下Activity的優先順序情況。Activity的優先順序從高到低可以大致分為一下三種:

    (1)前臺Activity——正在和使用者互動的Activity,優先順序最高。
    (2)可見但非前臺Activity——比如Activity中彈出了一個對話方塊,導致Activity可見但無法和使用者直接互動。
    (3)後臺Activity——已經被暫停或者停止的Activity,優先順序最底。

    當系統記憶體不足的時候,系統就會按照上述優先順序從低到高來殺死目標Activity。並在後續通過onSaveInstance和onRestoreInstance來儲存和恢復資料。
    特別提醒的是:如果一個程序中沒有四大元件(Activity、Service、ContentProvider、BroadCastReceiver)。那麼這個程序就會很快被殺死,因此一些後臺工作不適合脫離四大元件而獨立執行在後臺中,否則很容易被殺死。一般是將後臺工作放入Service中從而保證程序有一定的優先順序,這樣才不會被系統輕易殺死。

三、生命週期的使用

1.常見的生命週期有關問題:

  1. onStart和onResume、onPause和onStop從描述上看來差不多,但是他們為什麼會分開呢?有什麼不同?
  2. 兩個Activity A和B,從A中啟動B,那麼B的onResume與A的onPause哪個會先執行呢?
  3. onSaveInstance與onRestoreInstance是任何情況下都可以使用的嘛?所有的儲存資料和恢復的操作都可以在這對方法中執行?
  4. 如上面所說,如何使得在系統配置放生改變後,Activity不被重新建立呢?

2.解析

1、 onStart和onResume、onPause和onStop這兩對看起來是差不多,而且很多時候都會同時呼叫onPause、onStop,然後回到onStart、onResume。但是在一些比較特殊的情況下就不一樣了。我們舉兩種情況,
第一種:前臺彈出了一個Dialog,那麼這個Dialog的作用只是提醒使用者或者讓使用者輸入一個資訊等就完畢了,這是一個比較輕量級的任務;
第二種:重新啟動另一個Activity介面,轉到另一個模組。這時新啟動的Activity就不是一個臨時或者輕量級的任務了。
這兩種情況,第一種一般很快就會返回當前Activity,不會太耗時;第二種可能會很久,在這段時間內系統可能需要啟動其他的應用,那麼就會產生記憶體緊張的問題。所以,我認為是要區分這兩種情況,才會加入這兩對方法。在第一種情況下,可以在onPause中做一些較輕微的資料儲存,因為一般很快就會回到當前Activity;第二種情況下,適合在onStop中做一些較重量級的儲存。除此之外,我想不到其他的使用了。

2、這個問題可以從原始碼中得到解答。不過原始碼太複雜,涉及底層太多(AMS、Binder、ActivityStack、ActivityThread等)。不過可以直接呼叫生命週期,輸出系統日誌來得到解答。從下面的日誌我們可以看出,的確是要等到A活動的onPause方法之後B才能執行(這裡onCreate沒有輸出日誌):

03-23 01:02:31.339 32382-32382/com.example.david.lifecircle E/MainActivity: onCreate() is invoked!
03-23 01:02:31.341 32382-32382/com.example.david.lifecircle E/MainActivity: onStart() is invoked!
03-23 01:02:31.341 32382-32382/com.example.david.lifecircle E/MainActivity: onResume() is invoked!
03-23 01:04:04.005 32382-32382/com.example.david.lifecircle E/MainActivity: onPause() is invoked!
03-23 01:04:04.047 32382-32382/com.example.david.lifecircle E/SecondActivity: onStart() is invoked!
03-23 01:04:04.047 32382-32382/com.example.david.lifecircle E/SecondActivity: onResume() is invoked!
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

3、 onSaveInstance和onRestoreInstance是隻有Activity異常銷燬的時候才會呼叫的,所以這裡一般執行的是Activity異常銷燬時需要儲存和恢復的資料;onSaveInstance和onRestoreInstance方法還可以判斷Activity是否被重建,但正常情況下是不會呼叫的。所以正常情況下,還是應該在onPause和onStop方法中儲存資料。

4、上面提到,我們可以在AndroidMainfest.xml裡,對< activity />增加一個android:configChanges屬性,來指定在哪些配置改變的情況下Activity不需要重建。如下所示:

android:configChanges="orientation|screenSize"//介面方向以及大小的改變不需要重建
  • 1
我們在AndroidMainfest.xml做如下申明:
  • 1
  • 2
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.david.lifecircle">

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".MainActivity"
            android:configChanges="orientation|screenSize">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity android:name=".SecondActivity"></activity>
    </application>

</manifest>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22

MainActivity中的部分程式碼:

 @Override
    public void onConfigurationChanged(Configuration newConfig) {
        super.onConfigurationChanged(newConfig);
        Log.e("MainActivity","onConfigurationChanged() is invoked!"+newConfig.orientation);
    }

    @Override
    protected void onPause() {
        super.onPause();
        Log.e("MainActivity","onPause() is invoked!");
    }

    @Override
    protected void onResume() {
        super.onResume();
        Log.e("MainActivity","onResume() is invoked!");
    }

    @Override
    protected void onStart() {
        super.onStart();
        Log.e("MainActivity","onStart() is invoked!");
    }

    @Override
    protected void onRestart() {
        super.onRestart();
        Log.e("MainActivity","onRestart() is invoked!");
    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30

點選螢幕旋轉,然後來看一下系統日誌輸出:

03-23 01:14:11.357 10361-10361/com.example.david.lifecircle E/MainActivity: onCreate() is invoked!
03-23 01:14:11.359 10361-10361/com.example.david.lifecircle E/MainActivity: onStart() is invoked!
03-23 01:14:11.359 10361-10361/com.example.david.lifecircle E/MainActivity: onResume() is invoked!
03-23 01:14:28.140 10361-10361/com.example.david.lifecircle E/MainActivity: onConfigurationChanged() is invoked!2
03-23 01:14:38.294 10361-10361/com.example.david.lifecircle E/MainActivity: onConfigurationChanged() is invoked!1
03-23 01:14:47.531 10361-10361/com.example.david.lifecircle E/MainActivity: onConfigurationChanged() is invoked!2
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

我們發現,螢幕旋轉之後,並沒有重新呼叫生命週期,說明活動並沒有被重建。configChanges屬性還有許多的值,如:mcc\mnc\local\touchscreen\keyboard等等。

最後用一個實際的例子來說明Activity的各個生命週期。假設有一個程式由2個Activity A和B組成,A是這個程式的啟動介面。當用戶啟動程式時,Process和預設的Task分別被建立,接著A被壓入到當前的Task中,依次執行了 onCreate, onStart, onResume事件被呈現給了使用者;此時使用者選擇A中的某個功能開啟介面B,介面B被壓入當前Task遮蓋住了A,A的onPause事件執行,B的 onCreate, onStart, onResume事件執行,呈現了介面B給使用者;使用者在介面B操作完成後,使用Back鍵回到介面A,介面B不再可見,介面B的onPause, onStop, onDestroy執行,A的onResume事件被執行,呈現介面A給使用者。此時突然來電,介面A的onPause事件被執行,電話接聽介面被呈現給用 戶,使用者接聽完電話後,又按了Home鍵回到桌面,開啟另一個程式“聯絡人”,添加了聯絡人資訊又做了一些其他的操作,此時介面A不再可見,其 onStop事件被執行,但並沒有被銷燬。此後使用者重新從選單中點選了我們的程式,由於A和其所在的程序和Task並沒有被銷燬,A的onRestart 和onStart事件被執行,接著A的onResume事件被執行,A又被呈現給了使用者。使用者這次使用完後,按Back鍵返回到桌面,A的 onPause, onStop被執行,隨後A的onDestroy被執行,由於當前Task中已經沒有任何Activity,A所在的Process的重要程度被降到很 低,很快A所在的Process被系統結束
常見的例子

情形一、一個單獨的Activity的正常的生命過程是這樣的:onCreate->onStart->onPause->onStop->onDestroy。例如:執行一個Activity,進行了一些簡單操作(不涉及頁面的跳轉等),然後按返回鍵結束。

情形二、有兩個Activity(a和b),一開始顯示a,然後由a啟動b,然後在由b回到a,這時候a的生命過程應該是怎麼樣的呢(a被b完全遮蓋)?

a經歷的過程為onCreate->onStart->onResume->onPause->onStop->onRestart->onStart->onResume。這個過程說明了圖中,如果Activity完全被其他介面遮擋時,進入後臺,並沒有完全銷燬,而是停留在onStop狀態,當再次進入a時,onRestart->onStart->onResume,又重新恢復。

情形三、基本情形同二一樣,不過此時a被b部分遮蓋(比如給b添加個對話方塊主題 android:theme=”@android:style/Theme.Dialog”)

a經歷的過程是:onCreate->onStart->onResume->onPause->onResume

所以當Activity被部分遮擋時,Activity進入onPause,並沒有進入onStop,從Activity2返回後,執行了onResume

情形四、 開啟程式,啟動a,點選a,啟動AlertDialog,按返回鍵從AlertDialog返回。

a經歷的過程是:onCreate->onStart->onResume

當啟動和退出Dialog時,Activity的狀態始終未變,,因為Dialog實際上時一個View,它是屬於某一個Activity的,因此如果Dialog顯示在當前Activity之前時不會影響到Activity的生命週期的。但是如果是其他Activity的Dialog彈出那麼就會觸發onPause()方法的執行。

2.Android佈局

3.Android常用控制元件

4.Intent的使用

5.Android對話方塊

相關推薦

AndroidActivity——生命週期深入

一、生命週期全面分析Android活動預設執行在當前程序所擁有的棧中,前臺可見的活動則在活動棧的最頂部。其他後臺活動則在棧的裡面,在正常的情況下(記憶體充足)其他的活動並沒有被回收或者殺死,它們仍然存在於棧中保持著原來的狀態。當前面的活動退出後,後面的活動就會搬到前臺使得被使

androidActivity-生命週期

2、可見的生命週期,從onStart()開始到onStop()結束。在這段時間,可以看到Activity在螢幕上,儘管有可能不在前臺,不能和使用者互動。在這兩個介面之間,需要保持顯示給使用者的UI資料和資源等,例如:可以在onStart中註冊一個IntentReceiver來監聽資料變化導致UI的變動,當不再

Android非同步處理三Handler+Looper+MessageQueue深入

在《Android非同步處理一:使用Thread+Handler實現非UI執行緒更新UI介面》中,我們講到使用Thread+Handler的方式來實現介面的更新,其實是在非UI執行緒傳送訊息到UI執行緒,通知UI執行緒進行介面更新,這一篇我們將深入學習And

Android總結篇系列Activity生命週期

Android官方文件和其他不少資料都對Activity生命週期進行了詳細介紹,在結合資料和專案開發過程中遇到的問題,本文將對Activity生命週期進行一次總結。 Activity是由Activity棧進管理,當來到一個新的Activity後,此Activity將被加入到Activity棧頂,之前的A

AndroidActivity生命週期分析從AActivity 到BActivity過程分析

A啟動B  A生命週期全過程1.啟動A生命週期:Activity--A: onCreate---->呼叫成功生命週期:Activity--A: onStart---->呼叫成功生命週期:Activity--A: onResume---->呼叫成功2.在A中

Android問題Activity生命週期事件

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

Android基礎Activity生命週期細化

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

Android非同步處理Handler+Looper+MessageQueue深入

概述:Android使用訊息機制實現執行緒間的通訊,執行緒通過Looper建立自己的訊息循 環,MessageQueue是FIFO的訊息佇列,Looper負責從MessageQueue中取出訊息,並且分發到訊息指定目標Handler對 象。Handler物件繫結到執行緒的區域性變數Looper,封裝了傳送訊

Vue生命週期函式

 vue例項的生命週期 1 什麼是生命週期(每個例項的一輩子) 概念:每一個Vue例項建立、執行、銷燬的過程,就是生命週期;在例項的生命週期中,總是伴隨著各種事件,這些事件就是生命週期函式; 生命週期:例項的生命週期,就是一個階段,從建立到執行,再到銷燬的階段; 生命週期函式:在例項的生命週

AndroidActivity生命週期簡介

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

Vue鉤子函式生命週期例項

vue生命週期簡介 Vue例項有一個完整的生命週期,也就是從開始建立、初始化資料、編譯模板、掛載Dom、渲染→更新→渲染、解除安裝等一系列過程,我們稱這是Vue的生命週期。通俗說就是Vue例項從建立到銷燬的過程,就是生命週期。 在Vue的整個生命週期中,它提供了一系列的事件,可以讓我們在事件觸發時註冊js

androidActivity生命週期的詳細過程分析

android中Activity生命週期的詳細過程分析 Activity是安卓中相當重要的一個元件,理解它有利於我們後期更好的進行相關的開發,接下來我將演示一個demo來詳細講述Activity的生命週期過程。 首先寫兩個佈局檔案ks.xml和ks1.xml,用來實現兩個介面的跳轉,上面

Android開發— Activity生命週期和fragment的生命週期

(圖片就借鑑一下其他作者的,見諒!) Activity的生命週期在業務邏輯上的處理一定要慎重!!! Fragment的生命週期同樣十分重要,並且要常用frgment懶載入方案更要注意這種方式,其生命週期圖 同時我們都知道 Fragment 是依賴於 Acti

Android最全面的 Webview

前言 現在很多App裡都內建了Web網頁(Hyprid App),比如說很多電商平臺,淘寶、京東、聚划算等等,如下圖 那麼這種該如何實現呢?其實這是Android裡一個叫WebView的元件實現的。今天我將全面介紹WebView的常用用法。

監控android App Activity生命週期

說下場景: 1,監控當前應用生命週期 2,除錯應用,接手一個龐大的應用,快速知道當前是那個activity ,或者 fragment(會在另一篇中講) 3,如果你正常開發SDK ,當時你又想獲取當前的頁面的activity  4,不修改原始碼即可在生命週期內新增自己的

AndroidActivity生命週期總結(二)

     上一次寫了一下正常情況下的生命週期,這一次在這裡對異常狀態的生命週期進行一個個人的總結。       Activity除了使用者正常的操作所導致的生命週期方法的呼叫,但是還有一些極端的情況會導致Activity 生命週期  無法按照正常的情況去呼叫。下面具體的分析異

簡述androidactivity生命週期

本文描述Android中Activity的狀態,Activity的狀態轉換,從而總結了Activity各個生命週期的典型時序。與Android現有框架結合,充分考慮Activity的各個生命週期階段,應用開發者實現相應的回撥介面,只有這樣,才能開發出符合框架規範的程式。

AndroidActivity生命週期

1.啟動Activity:系統會先呼叫onCreate方法,這是生命週期第一個方法,然後呼叫onStart方法,最後呼叫onResume,Activity進入  執行狀態。 onCreate方法:一般做一些初始化工作,比如setContentView去載入佈局資源,初

【React自制全家桶】五、React元件的生命週期函式

一、總覽React元件的生命週期函式   什麼是生命週期函式:簡單的來說就是 在某個時刻會自動執行的函式 二、React的生命週期函式主要由四塊組成 分別是:元件初始化、元件掛載、元件更新、元件解除安裝 三、生命週期之元件初始化 作用:元件初始時設定pr

AndroidActivity生命週期淺析(一)

  Activity作為四大元件之一,出現的頻率相當高,基本上我們在android的各個地方都能看見它的蹤影,因此深入瞭解Activity,對於開發高質量應用程式是很有幫助的。今天我們就來詳細地聊聊Activity的生命週期,以便我們在以後的開發中能如魚得水。