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

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

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

    Calvin's Tech Space

    成于堅(jiān)忍,毀于浮躁

       :: 首頁(yè) :: 聯(lián)系 :: 聚合  :: 管理
    啟動(dòng)activity:
    **android.process.acore進(jìn)程
    1.Acticity.startActivityForResult()
    2.Instrumention.execStartActivity();
    3.ActivityManagerNative.getDefault()
                    .startActivity()
      3.1 ActivityManagerNative.getDefault()返回的是ActivityManagerProxy的實(shí)例,
      它只是一個(gè)代理類(lèi),這個(gè)代理類(lèi)實(shí)際上代理的是IBinder b = ServiceManager.getService("activity");
      這個(gè)Service。
      3.2 這個(gè)Service是什么時(shí)候添加進(jìn)來(lái)的呢?
      在SystemServer.java的run()中有調(diào)用
      ActivityManagerService.setSystemProcess();
          ServiceManager.addService("activity", m);
          這里還會(huì)添加許多系統(tǒng)關(guān)鍵服務(wù)。
          (TODO:查看在SystemServer的Log輸出)
         
    **system_process進(jìn)程
    4 ActivityManagerNative
        |--ActivityManagerService
       
        在ActivityManagerNative的onTransact方法中最終提供了服務(wù):
        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)
              在這個(gè)方法里面檢查權(quán)限,解析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)
                        在這里啟動(dòng)一個(gè)進(jìn)程用來(lái)host這個(gè)應(yīng)用
                        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                      //這里實(shí)際是ApplicationThreadNative提供的服務(wù)
            --handleMessage()@H$ActivityThread.java
              --handleLaunchActivity()@ActivityThread.java
                --Activity performLaunchActivity(ActivityRecord r, Intent customIntent)@ActivityThread.java  //這時(shí)真正的Activity對(duì)象被構(gòu)造出來(lái)
                  --mInstrumentation.newActivity()                            //通過(guò)反射構(gòu)造出Activity對(duì)象
                  --activity.attach()                                         //初始化Activity,生成一個(gè)window對(duì)象,設(shè)置各種狀態(tài)等等
                  --mInstrumentation.callActivityOnCreate(activity, r.state);  //調(diào)用Activity的onCreate()方法
               
                  到這里,我們自己寫(xiě)的activity的onCreate()方法已經(jīng)被系統(tǒng)調(diào)用了,接下來(lái)依次回調(diào)生命周期方法:
                  --activity.performStart();
                    --mInstrumentation.callActivityOnStart(this);
                  --mInstrumentation.callActivityOnRestoreInstanceState(activity, r.state);
                  --mInstrumentation.callActivityOnPostCreate(activity, r.state);
                  --mActivities.put(r.token, r);                               //將這個(gè)activity入棧
                 
                然后就要調(diào)用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()已經(jīng)調(diào)用完畢,一個(gè)activity的邏輯處理結(jié)束了,但是這時(shí)候屏幕上還不會(huì)顯示任何東西,因?yàn)閂iew還沒(méi)有添加進(jìn)去
                   
                   
                  --r.window.getDecorView();                                   //開(kāi)始把DecorView添加進(jìn)Window
                  --wm.addView(decor, l);
               
                至此一個(gè)Activity啟動(dòng)結(jié)束。
    posted on 2010-11-23 14:59 calvin 閱讀(4222) 評(píng)論(1)  編輯  收藏 所屬分類(lèi): Android

    Feedback

    # re: [原]Activity啟動(dòng)過(guò)程分析 2011-07-08 21:26 mark in working
    寫(xiě)的很好,向您學(xué)習(xí)!  回復(fù)  更多評(píng)論
      

    主站蜘蛛池模板: 亚洲视频在线一区二区| 亚洲制服丝袜中文字幕| 亚洲丰满熟女一区二区v| 亚洲av成本人无码网站| 亚洲午夜理论片在线观看| 九九全国免费视频| 日韩免费无砖专区2020狼| 亚洲性猛交xx乱| 最新69国产成人精品免费视频动漫 | 女人被男人躁的女爽免费视频| 男人和女人高潮免费网站| 久久亚洲精品成人综合| 久久免费精品一区二区| 亚洲中文字幕AV每天更新| 亚洲中文字幕不卡无码| 女人18毛片水真多免费看| 久草免费手机视频| 国产精品成人亚洲| 亚洲另类自拍丝袜第1页| 亚洲综合无码精品一区二区三区| 无码日韩人妻av一区免费| 中文字幕乱码免费看电影| 亚洲国产精品精华液| 亚洲国产婷婷香蕉久久久久久| 国产精品无码亚洲一区二区三区| 久久综合日韩亚洲精品色| 亚洲?V乱码久久精品蜜桃| 永久免费AV无码国产网站| 亚洲免费人成在线视频观看 | 亚洲狠狠婷婷综合久久| 亚洲高清在线播放| 亚洲无线一二三四区手机| 国产精品无码免费播放| 美女视频黄a视频全免费网站色| 亚洲精品美女久久久久9999| 永久亚洲成a人片777777| 国产在线ts人妖免费视频| 久久不见久久见中文字幕免费| 久久免费公开视频| 91福利免费网站在线观看| 香蕉国产在线观看免费|