溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

【移動開發(fā)】Android中Activity剖析

發(fā)布時間:2020-08-25 10:05:12 來源:網(wǎng)絡 閱讀:748 作者:zhf651555765 欄目:開發(fā)技術

    又到了暑假,大四的走了,我們理所當然成為了學校的老大,哈哈!今年不打算回家了,在學校和校友一起參加比賽做項目。好久就有寫博客的沖動,但老是被各種事情所打擾,今天終于考完試了,于是在安靜的宿舍開始提筆寫起我的第一篇博客。寫博客的目的主要是:總結以下這一年多來接觸Android開發(fā)中所學到的知識,以此來督促自己不斷地前進學習(廢話比較多。。。此段可以忽略)

  1. Activity 棧

       Android 是通過一種 Activity 棧的方式來管理 Activity 的,一個 Activity 的實例的狀態(tài)決定它在棧中的位置。處于前臺的 Activity 總是在棧的頂端,當前臺的 Activity 因為異?;蚱渌虮讳N毀時,處于棧第二層的 Activity 將被激活,上浮到棧頂。

       當新的 Activity 啟動入棧時,原 Activity 會被壓入到棧的第二層。一個 Activity 在棧中的位置變化反映了它在不同狀態(tài)間的轉換。Activity 的狀態(tài)與它在棧中的位置關系如下圖所示:

    【移動開發(fā)】Android中Activity剖析

  2. Activity的生命周期

   首先看看android developers 網(wǎng)上的activity的生命周期圖:



【移動開發(fā)】Android中Activity剖析

   其實,當初我第一次開始看到此圖的時候,也是一頭霧水,于是就寫了一個Demo簡單測試一下,結果就清楚明了了:

package com.tutor.activitydemo;
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
public class ActivityDemo extends Activity {
    private static final String TAG = "ActivityDemo";
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        Log.e(TAG, "---》onCreate()");
    }
    @Override
    protected void onStart() {
        super.onStart();
        Log.e(TAG, "---》onStart()");
    }
    @Override
    protected void onRestart() {
        super.onRestart();
        Log.e(TAG, "---》onRestart()");
    }
    @Override
    protected void onResume() {
        super.onResume();
        Log.e(TAG, "---》onResume()");
    }
    @Override
    protected void onPause() {
        super.onPause();
        Log.e(TAG, "---》onPause()");
    }
    @Override
    protected void onStop() {
        super.onStop();
        Log.e(TAG, "---》onStop()");
    }
    @Override
    protected void onDestroy() {
        super.onDestroy();
        Log.e(TAG, "---》onDestroy()");
    }
}


方法說明:

   1.protected void onCreate(Bundle savedInstanceState)一個 Activity 的實例被啟動時調(diào)用的第一個方法。一般情況下,我們都覆蓋該方法作為應用程序的一個入口點,在這里做一些初始化數(shù)據(jù)(加載用戶數(shù)據(jù)庫保存數(shù)據(jù),配置信息)、設置用戶界面等工作。大多數(shù)情況下,我們都要在這里從 xml 中加載設計好的用戶界面。

   2.protected void onStart()該方法在 onCreate() 方法之后被調(diào)用,或者在 Activity 從 Stop 狀態(tài)轉換為 Active 狀態(tài)時被調(diào)用。

   3.protected void onResume() 在 Activity 從 Pause 狀態(tài)轉換到 Active 狀態(tài)時被調(diào)用。

    4.protected void onResume()在 Activity 從 Active 狀態(tài)轉換到 Pause 狀態(tài)時被調(diào)用。

    5.protected void onStop()在 Activity 從 Active 狀態(tài)轉換到 Stop 狀態(tài)時被調(diào)用。一般我們在這里保存 Activity 的狀態(tài)信息。

    6.protected void onDestroy()在 Active 被結束時調(diào)用,它是被結束時調(diào)用的最后一個方法,在這里一般做些釋放資源,清理內(nèi)存等工作。


打印結果分析:

 第一組

     1.打開應用后執(zhí)行順序:onCreate()->onStart()->onResume()

     2.按Back鍵后結束這個應用:onPause()->onStop()->onDestory()

 第二組

    3.按Home鍵后:onPause()->onStop()這兩個方法,這時候應用程序并沒有銷毀;緊接著再次進入此程序會執(zhí)行:onRestart()->onStart()->onResume()

   為了更好的理解Activity的生命周期,從網(wǎng)上找到此圖:

【移動開發(fā)】Android中Activity剖析

   從上圖可以看到,最右邊下方的Android機器人代表啟動一個Activity,經(jīng)過一系列的操作和過程,經(jīng)過三個生命周期回調(diào)方法,到達金字塔的頂層,爬到頂層就可以供用戶操作了。然后從金字塔頂往下,再經(jīng)過三個生命周期方法,就又到了金字塔的另一邊底層,Activity就銷毀了。但是當下金字塔的時候,只要沒到最下面,都有通道可以回到最頂層。

   1.Activity在onStart方法調(diào)用后,就處于可見狀態(tài)了(visible)


   2.當經(jīng)過onPause方法后處于暫停狀態(tài)(Paused),這時Activity處于半透明狀態(tài),為不可操作的,比如彈出一個模態(tài)框。這時Activity不會執(zhí)行任何代碼

   3.Activity在調(diào)用onStop方法后即處于用戶不可見的狀態(tài)了(invisible)


   4.onCreate方法在整個生命周期只會被調(diào)用一次


   5.自定義Activity繼承Activity類后有沒有需要必須實現(xiàn)的方法?答案是沒有,但是要想啟動和顯示一個Activity,就必須實現(xiàn)onCreate方法并指定布局文件


   6.大部分的清理操作應該在onPause和onStop中執(zhí)行,如果在onCreate中開啟了耗時線程或耗資源的線程操縱,應該在onDestroy中殺死線程

  注意:

   系統(tǒng)一般都是在執(zhí)行完onPause和onStop方法后再執(zhí)行onDestroy方法,但是當在onCreate方法中調(diào)用了Activity的finish()方法后,比如在onCreate方法里啟動新的Activity并調(diào)用了finish方法,這時系統(tǒng)會直接調(diào)用onDestroy方法!

就這些吧,東西比較簡單,主要是為了練練博客怎么寫,嘿嘿!






向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權內(nèi)容。

AI