<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>

                ??一站式輕松地調用各大LLM模型接口,支持GPT4、智譜、豆包、星火、月之暗面及文生圖、文生視頻 廣告
                am和pm(見4.4.2節)一樣,也是一個腳本,它用來和AMS交互,如啟動Activity、啟動Service、發送廣播等。其核心文件在Am.java中,代碼如下: **Am.java::main** ~~~ public static void main(String[] args) { try { (newAm()).run(args);//構造一個Am對象,并調用run函數 }...... } ~~~ am的用法很多,讀者可通過adb shell登錄手機,然后執行am,這樣就能獲取它的用法。 利用am啟動一個activity的方法如下: ~~~ am start [-D] [-W] [-P <FILE>][--start-profiler <FILE>] [-S] <INTENT> ~~~ 其中: - 方括號中的參數為可選項,尖括號中的參數為必選項。 - <INTENT>參數有很多,主要是用于設置Intent的各項參數。 假設已知某個Activity的ComponentName(package名和Activity的Class名),啟動這個Activity的相應命令如下: ~~~ am start -W -n com.dfp.test/.TestActivity ~~~ 其中,-W選項表示am將會等目標Activity啟動后才返回,-n表示后面的參數用于設置Intent的Component。就本例而言,com.dfp.test為Package名,.TestActivity為該Package下對應的Activity類名,所以將要啟動的Activity的全路徑名為com.dfp.test.TestActivity。 現在就以上面的命令為例來分析Am的run函數,代碼如下: **Am.java::run** ~~~ privatevoid run(String[] args) throws Exception { mAm =ActivityManagerNative.getDefault(); mArgs =args; String op= args[0]; mNextArg =1; if (op.equals("start")) runStart();//用于啟動Activity else if ......//處理其他參數 } ~~~ runStart函數用于處理Activity啟動請求,其代碼如下: **Am.java::runStart** ~~~ privatevoid runStart() throws Exception { Intentintent = makeIntent(); StringmimeType = intent.getType(); //獲取mimeType, if(mimeType == null && intent.getData() != null && "content".equals(intent.getData().getScheme())) { mimeType = mAm.getProviderMimeType(intent.getData()); } if(mStopOption) { ......//處理-S選項,即先停止對應的Activity,再啟動它 } //FLAG_ACTIVITY_NEW_TASK這個標簽很重要 intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); ParcelFileDescriptor fd = null; if(mProfileFile != null) { try{......//處理-P選項,用于性能統計 fd = ParcelFileDescriptor.open(......) }...... } IActivityManager.WaitResult result = null; int res; if(mWaitOption) {//mWaitOption控制是否等待啟動結果,如果有-W選項,則該值為true //調用AMS的startActivityAndWait函數 result = mAm.startActivityAndWait(null,intent, mimeType, null, 0, null, null, 0,false, mDebugOption, mProfileFile, fd,mProfileAutoStop); res= result.result; } ...... ......//打印結果 } ~~~ am最終將調用AMS的startActivityAndWait函數來處理這次啟動請求。下面將深入到AMS內部去繼續這次旅程。 * * * * * **提示**:為什么選擇從am來分析Activity的啟動呢?如果選擇從一個Activity來分析如何啟動另一個Activity,則將給人一種雞生蛋、蛋孵雞的感覺,故此處選擇從am入手。除此之外,從am來分析Activity的啟動也是Activity啟動分析中相對簡單的一條路線。 * * * * *
                  <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>

                              哎呀哎呀视频在线观看