Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> Android開發實例 >> Android核心分析(22)-----Android應用框架之Activity

Android核心分析(22)-----Android應用框架之Activity

編輯:Android開發實例

3 Activity設計框架

3.1 外特性空間的Activity

    我們先來看看,Android應用開發人員接觸的外特性空間中的Activity,對於AMS來講,這個Activity就是客服端的Activity。應用程序員在建立Android應用時,構建Activity的子類就是Andoid外特性空間展現的接口。我們可以從下面的簡單的例子描述看看Activity,到底如何建立的。

DemoActivity extend Activity

{

     onCreate

    onResume

    onPause

    onStop

}

    在Android的外特性空間(SDK)中,Android應用程序員根本不知道進程是什麼時候起來的,系統消息是如何傳遞過來的。這個DemoActivity是如何實例化的呢?並且該Activity是托管在哪個進程的呢?本節的分析將給出答案。

我們從ActivityThread中可以看到在應用進程中的Activity都被放置在mActivities中。

    這些ActivityRecord記錄了應用進程中,程序員建立的Activity子類的實例,我們稱之為外特性空間的Activity。這些Activity類實例是放在應用程序端進行實際交互的Activity,而為了管理這些Activity,AMS內核中還有一個影子Activity,被稱為HistoryRecord。

3.2 Activity與HistoryRecord的關系

     在整個系統中,Activity實際上有兩個實體。一個在應用進程中跟應用程序員打交道的Activity,一個是在AMS的中具有管理功能的History Record。應用進程中的Activity都登記ActivityThread實例中的mActivity數組中,而在AM端,HistroytRecord實例放置在mHistroy棧中。mHistory棧是Android管理Activity的場所,放置在棧頂的就是User看到的處於活動狀態的Activity。

Activity與HistrotyRecord的關系圖可以表示如下:

       Activity的內核實體是依靠在ProcessRecord的成員變量中,通過ProcessRecord我們可以訪問到所有的屬於該Process的Activity。而在ProcessRecord記錄了與應用進程之間的聯系:IActivtityThread接口。通過該接口,可以訪問到所對應的Activity的方法。在Launch Activity時,AMS將對應的HistoryRecord作為token傳遞到客服端和客服端的Activity建立聯系。在AMS中Activity狀態變化時,將通過該聯系找到客服端的Activity,從而將消息或者動作傳遞應用程序面對的接口:xxxActivity。

3.3 Actvity的Launch過程

1)發起請求startActivity(intent)

2)Activity Service Manager接收到請求執行StartActivity函數。

      建立:HistoryRecord實例r.

      將r 加入到mHistory頂。

(3)通過app.thread.scheduleLaunchActvity( app,r)@ActivityThread.java

(4)在App應用中建立新的ActivityRecord。

(5)建立新的Activity對象並放入到ActivityRecord中。

(6)將ActivityRecord加?a class="__cf_email__" href="/cdn-cgi/l/email-protection" data-cfemail="de356b63b39fbdaab7a8b7aabbad9e9fbdaab7a8b7aaa78ab6acbbbfba">[email protected]

(7)發起Activity.onCreate(..),,該onCreate就是在你的應用程序XXXActivity中的onCreate。

 

3.4 Activity的Resume

(1)Activity什麼時候被Resume

(2)Rusume的過程

    通過該過程的研究我們會進一步的了解到AMS與應用進程的交互過程。

在AMS端,滿足resume條件都會調用:Resume的核心函數:[email protected]

XXX當前棧頂的HistroyRecord

1)窗口切換:隱藏前一個Activity的窗口,

2)更新LRUList,(LRUList是淘汰應用程序的依據之一)

3) XXX.app.thread.scheduleResumeActivity(XXX,

                        isNextTransitionForward());

4)completeResumeLocked

     setFocusedActivityLocked

        mFocusActivity=xxx  //此時焦點Actvitiy切換了。

       WM.setFocusedApp(xxx,

       mWindowManager.executeAppTransition();

       mNoAnimActivities.clear();

在應用程序端:

(5)scheduleResumeActivity

handleResumeActivity(IBinder token, boolean clearHide, boolean isForward) {

ActivityRecord r = performResumeActivity(token, clearHide);

     ActivityRecord r = mActivities.get(token);

     r.activity.performResume()

              performResume

整個Resume的過程如下:

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved