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

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

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

    Calvin's Tech Space

    成于堅忍,毀于浮躁

       :: 首頁 :: 聯系 :: 聚合  :: 管理
    啟動activity:
    **android.process.acore進程
    1.Acticity.startActivityForResult()
    2.Instrumention.execStartActivity();
    3.ActivityManagerNative.getDefault()
                    .startActivity()
      3.1 ActivityManagerNative.getDefault()返回的是ActivityManagerProxy的實例,
      它只是一個代理類,這個代理類實際上代理的是IBinder b = ServiceManager.getService("activity");
      這個Service。
      3.2 這個Service是什么時候添加進來的呢?
      在SystemServer.java的run()中有調用
      ActivityManagerService.setSystemProcess();
          ServiceManager.addService("activity", m);
          這里還會添加許多系統關鍵服務。
          (TODO:查看在SystemServer的Log輸出)
         
    **system_process進程
    4 ActivityManagerNative
        |--ActivityManagerService
       
        在ActivityManagerNative的onTransact方法中最終提供了服務:
        case START_ACTIVITY_TRANSACTION:
          ActivityManagerService.startActivity();
            --startActivityLocked(IApplicationThread caller,
                Intent intent, String resolvedType,
                Uri[] grantedUriPermissions,
                int grantedMode, ActivityInfo aInfo, IBinder resultTo,
                String resultWho, int requestCode,
                int callingPid, int callingUid, boolean onlyIfNeeded,
                boolean componentSpecified)
              --startActivityUncheckedLocked(r, sourceRecord,
                    grantedUriPermissions, grantedMode, onlyIfNeeded, true)
              在這個方法里面檢查權限,解析intent中的Flag。。。
              --startActivityLocked(HistoryRecord r, boolean newTask)
                --resumeTopActivityLocked(HistoryRecord prev)
                  --startSpecificActivityLocked(HistoryRecord r,boolean andResume, boolean checkConfig)
                    --startProcessLocked(String processName,ApplicationInfo info, boolean knownToBeDead, int intentFlags,String hostingType, ComponentName hostingName)
                      --startProcessLocked(ProcessRecord app,String hostingType, String hostingNameStr)
                        在這里啟動一個進程用來host這個應用
                        int pid = Process.start("android.app.ActivityThread",
                        mSimpleProcessManagement ? app.processName : null, uid, uid,
                        gids, debugFlags, null);
                       
    ActivityManagerService.java
    --startSpecificActivityLocked(HistoryRecord r,boolean andResume, boolean checkConfig)
      --realStartActivityLocked(HistoryRecord r,ProcessRecord app, boolean andResume, boolean checkConfig)
        --app.thread.scheduleLaunchActivity                                   //scheduleLaunchActivity()@IApplicationThread.java
          --scheduleLaunchActivity()@ActivityThread.java                      //這里實際是ApplicationThreadNative提供的服務
            --handleMessage()@H$ActivityThread.java
              --handleLaunchActivity()@ActivityThread.java
                --Activity performLaunchActivity(ActivityRecord r, Intent customIntent)@ActivityThread.java  //這時真正的Activity對象被構造出來
                  --mInstrumentation.newActivity()                            //通過反射構造出Activity對象
                  --activity.attach()                                         //初始化Activity,生成一個window對象,設置各種狀態等等
                  --mInstrumentation.callActivityOnCreate(activity, r.state);  //調用Activity的onCreate()方法
               
                  到這里,我們自己寫的activity的onCreate()方法已經被系統調用了,接下來依次回調生命周期方法:
                  --activity.performStart();
                    --mInstrumentation.callActivityOnStart(this);
                  --mInstrumentation.callActivityOnRestoreInstanceState(activity, r.state);
                  --mInstrumentation.callActivityOnPostCreate(activity, r.state);
                  --mActivities.put(r.token, r);                               //將這個activity入棧
                 
                然后就要調用onResume()方法了:
                --handleResumeActivity(IBinder token, boolean clearHide, boolean isForward)
                  --performResumeActivity(token, clearHide);
                    --r.activity.performResume();
                      --performRestart()@Activity.java;
                        --mInstrumentation.callActivityOnRestart(this);
                        --mInstrumentation.callActivityOnStart(this);
                    --mInstrumentation.callActivityOnResume(this);
                    onResume()已經調用完畢,一個activity的邏輯處理結束了,但是這時候屏幕上還不會顯示任何東西,因為View還沒有添加進去
                   
                   
                  --r.window.getDecorView();                                   //開始把DecorView添加進Window
                  --wm.addView(decor, l);
               
                至此一個Activity啟動結束。
    posted on 2010-11-23 14:59 calvin 閱讀(4220) 評論(1)  編輯  收藏 所屬分類: Android

    Feedback

    # re: [原]Activity啟動過程分析 2011-07-08 21:26 mark in working
    寫的很好,向您學習!  回復  更多評論
      

    主站蜘蛛池模板: 日韩精品成人无码专区免费| 黄网站免费在线观看| 无码精品A∨在线观看免费| 亚洲午夜在线电影| 人人玩人人添人人澡免费| 亚洲成a人片在线观看无码专区| 精品久久久久久无码免费| 亚洲一区二区三区在线观看精品中文 | 亚洲精品在线不卡| 久久久久久影院久久久久免费精品国产小说 | 亚洲精华国产精华精华液网站| 男女免费观看在线爽爽爽视频| 亚洲国产精品成人久久久 | 全免费一级毛片在线播放| 亚洲日韩一区精品射精| 国产精品国产自线拍免费软件| 无码天堂亚洲国产AV| 亚洲精品WWW久久久久久| 抽搐一进一出gif免费视频| 久久久久亚洲精品影视| 日韩精品免费一级视频| 亚洲午夜无码毛片av久久京东热| 日本免费一区二区三区最新 | 亚洲熟妇av午夜无码不卡| 免费一看一级毛片| 九九99热免费最新版| 亚洲va在线va天堂va888www| 性短视频在线观看免费不卡流畅| 中文字幕亚洲综合久久综合| 亚洲AV之男人的天堂| 嫩草影院在线播放www免费观看| 亚洲第一页在线播放| 永久免费观看的毛片的网站| 国产精品偷伦视频免费观看了| 亚洲AV天天做在线观看| 手机在线毛片免费播放 | 99久热只有精品视频免费看| 亚洲av无码不卡久久| 免费人成视网站在线观看不卡| 久久久久国产精品免费免费不卡 | 九九久久国产精品免费热6 |