<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    常用鏈接

    統計

    最新評論

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

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

    From  http://blog.csdn.net/maxleng/archive/2010/05/24/5621349.aspx

    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中。

    image_thumb3

        這些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的關系圖可以表示如下:

    image_thumb6

           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加入到mActivites@ActivityThread

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

      image_thumb10

    3.4 Activity的Resume

    (1)Activity什么時候被Resume

    image_thumb13

    (2)Rusume的過程

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

    在AMS端,滿足resume條件都會調用:Resume的核心函數:resumeTopActivityLocked@ActivityManagerService

    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的過程如下:

    image_thumb16

    posted on 2010-09-25 15:39 九寶 閱讀(336) 評論(0)  編輯  收藏 所屬分類: android

    主站蜘蛛池模板: 亚洲一区二区三区国产精品无码 | 国产精品久久亚洲一区二区| 99re6在线视频精品免费下载| 亚洲国产精品一区第二页| 久久99久久成人免费播放| 国产亚洲成人久久| AAAAA级少妇高潮大片免费看| 亚洲一区爱区精品无码| 国产精品区免费视频| 亚洲美女视频一区二区三区| 99久久久精品免费观看国产| 亚洲一级在线观看| 免费看的黄色大片| 曰批全过程免费视频观看免费软件 | www一区二区www免费| 在线观看亚洲成人| 亚洲成人免费在线| 日韩亚洲国产高清免费视频| 国产网站在线免费观看| 国产黄在线播放免费观看| 亚洲av无码成人黄网站在线观看 | 国产极品粉嫩泬免费观看| 一级毛片a免费播放王色电影 | 亚洲精品韩国美女在线| 免费A级毛片无码无遮挡内射| 亚洲精品无码久久久久APP| 国产福利电影一区二区三区,亚洲国模精品一区 | 亚洲精品人成无码中文毛片| 成全视成人免费观看在线看| 久久久久亚洲av无码专区喷水| 午夜dj免费在线观看| 四虎一区二区成人免费影院网址| 国产亚洲av片在线观看播放| 国产精品视频免费观看| 免费一级毛片在线播放放视频| 亚洲AV无码久久精品蜜桃| 久久电影网午夜鲁丝片免费| 久久国产乱子伦精品免费午夜| 久久亚洲精品无码VA大香大香| 国产yw855.c免费视频| 亚洲视频免费在线观看|