<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 閱讀(4227) 評論(1)  編輯  收藏 所屬分類: Android

    Feedback

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

    主站蜘蛛池模板: 无码精品国产一区二区三区免费 | 免费无码作爱视频| 亚洲毛片免费视频| 日本人护士免费xxxx视频| 久久国产精品萌白酱免费| 黄色一级视频免费观看| 亚洲一日韩欧美中文字幕在线| 亚洲男人的天堂在线va拉文| free哆啪啪免费永久| 精品无码人妻一区二区免费蜜桃| 女人18毛片a级毛片免费视频| 亚洲精品无码不卡在线播HE| 亚洲第一成人影院| 一级做a免费视频观看网站| 亚洲精品无码鲁网中文电影| 亚洲精品无码乱码成人| 亚洲AV永久青草无码精品| 成年人免费的视频| 精品国产免费观看| 国产人成免费视频网站| 成人免费大片免费观看网站| AV片在线观看免费| 一个人看的www免费高清| 西西人体免费视频| **俄罗斯毛片免费| 一级做a爰性色毛片免费| h在线看免费视频网站男男| 亚洲国产综合在线| 亚洲中文字幕日产乱码高清app| 亚洲AV人无码激艳猛片| 日韩视频在线精品视频免费观看| 亚洲欧洲中文日韩av乱码| 美女视频黄的全免费视频| 国产精品免费看久久久久| 91av免费观看| 中文字幕专区在线亚洲| 亚洲精品第一国产综合野| 国产A∨免费精品视频| 57pao国产成永久免费视频| 亚洲国产精品狼友中文久久久| 久草福利资源网站免费|