<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                # 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](https://box.kancloud.cn/2016-05-05_572b1a25bf03b.gif "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](https://box.kancloud.cn/2016-05-05_572b1a25d3511.gif "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](https://box.kancloud.cn/2016-05-05_572b1a25edd5b.gif "image_thumb10")](#) ### 3.4 Activity的Resume (1)Activity什么時候被Resume [![image_thumb13](https://box.kancloud.cn/2016-05-05_572b1a2613625.gif "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](https://box.kancloud.cn/2016-05-05_572b1a262dd95.gif "image_thumb16")](#)
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看