<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人无码亚洲成www牛牛 | 搡女人免费免费视频观看| 亚洲日本一区二区三区在线不卡| 美女羞羞视频免费网站| 亚洲成av人在片观看| 国产免费久久精品99久久| 亚洲级αV无码毛片久久精品| 国产在线观看无码免费视频| 国产av天堂亚洲国产av天堂| 免费看搞黄视频网站| 亚洲美女激情视频| 成年男女免费视频网站| 亚洲精品国产第一综合99久久 | 久久夜色精品国产亚洲AV动态图| 久久国产精品一区免费下载| 亚洲综合自拍成人| 无码国产精品一区二区免费| 亚洲国产aⅴ成人精品无吗| 亚洲成人影院在线观看| 久久精品无码专区免费| 亚洲色图视频在线观看| 久久久久国色AV免费观看性色 | 国产偷国产偷亚洲高清在线| 亚洲人AV永久一区二区三区久久| 午夜精品射精入后重之免费观看| 亚洲人成在线中文字幕| 亚洲?v女人的天堂在线观看| 免费一级毛片无毒不卡| 亚洲jjzzjjzz在线播放| 免费一级毛片在线播放| 秋霞人成在线观看免费视频| 中中文字幕亚洲无线码| 亚洲一级Av无码毛片久久精品| 久久久久免费看成人影片| 国产亚洲精品AAAA片APP| 国产AV无码专区亚洲Av| 日韩视频免费一区二区三区| a级大片免费观看| 亚洲av片在线观看|