中文国产日韩欧美视频,午夜精品999,色综合天天综合网国产成人网,色综合视频一区二区观看,国产高清在线精品,伊人色播,色综合久久天天综合观看

第6章4節(jié)《MonkeyRunner源碼剖析》Monkey原理分析事件源事件源概覽翻譯命令 -電腦資料

電腦資料 時間:2019-01-01 我要投稿
【www.szmdbiao.com - 電腦資料】

    在第2節(jié)中我們看到了MonkeySourceNetwork是如何從Socket中獲取MonkeyRunner發(fā)送過來的命令字串的,但是最后如何將它翻譯成事件的代碼我們還沒有進行分析,因為在那之前我們還沒有了解命令翻譯類的相關(guān)知識,

第6章4節(jié)《MonkeyRunner源碼剖析》Monkey原理分析事件源事件源概覽翻譯命令

。那么經(jīng)過第3小節(jié)對命令翻譯類的學習后,我們就可以繼續(xù)往下分析MonkeySourceNetwork的getNextEvent中是如何翻譯命令字串的了。

    我們回看下第2小節(jié),最后在獲得命令字串之后調(diào)用的是MonkeySourceNetwork類的translateCommand方法:

653   private void translateCommand(String commandLine)654   {655     Log.d(MonkeyStub, translateCommand:  + commandLine);656     List<string>parts = commandLineSplit(commandLine);657     if (parts.size() > 0) {658       MonkeyCommand command = (MonkeyCommand)COMMAND_MAP.get(parts.get(0));659       if (command != null) {660         MonkeyCommandReturn ret = command.translateCommand(parts, this.commandQueue);661         handleReturn(ret);662       }663     }664   }</string>
代碼6-4-1 MonkeySourceNetwork - translateCommand

653行: 傳進來的參數(shù)就是一個命令字串。 通過” 表3-3-1 命令字串和對應(yīng)的命令翻譯類參照表”我們可以看到一個命令字串如果帶有參數(shù)的話它的形式可能是這樣的“type line”

656行: 為了方便使用該命令,通過調(diào)用commandLineSplit方法把命令字串轉(zhuǎn)換成一個列表分別把命令,每個參數(shù)都獨立保存在列表里面。這個方法無非就是根據(jù)空格等把命令和參數(shù)分解出來,所以就不跟蹤進去分析了

658行: 將命令和參數(shù)分離分別存放到列表后,根據(jù)命令去” 代碼3-1-2 MonkeySourceNetwork - COMMAND_MAP”所描述的COMMAND_MAP去查找對應(yīng)的命令翻譯類實例。以上面的”touch x y”命令字串為例,就是根據(jù)”type”去COMMAND_MAP中查找,對應(yīng)的將是這一行:

461         COMMAND_MAP.put(type, new TypeCommand());

    也就是說找到的對應(yīng)的命令翻譯類是TypeCommand

660行:調(diào)用命令翻譯類的translateCommand方法來翻譯命令列表,注意這里傳進去的參數(shù)除了命令字串列表之外還有一個MonkeySourceNetwork的成員變量commandQueue,也就是我們一直說的命令隊列,傳進去的目的就是在解析命令的過程中如果需要創(chuàng)建一個對應(yīng)事件實例的話,那么創(chuàng)建完后就直接往這個同一個的命令隊列里面丟就行了

    那么往下我們就看下上面的TypeCommand的translateCommand方法是如何實現(xiàn)的:

294         public MonkeyCommandReturn translateCommand(List<string>command,295             CommandQueue queue) {296             if (command.size() == 2) {297                 String str = command.get(1);298 299                 char[] chars = str.toString().toCharArray();300 301                 // Convert the string to an array of KeyEvent's for302                 // the built in keymap.303                 KeyCharacterMap keyCharacterMap = KeyCharacterMap.304                         load(KeyCharacterMap.VIRTUAL_KEYBOARD);305                 KeyEvent[] events = keyCharacterMap.getEvents(chars);306 307                 // enqueue all the events we just got.308                 for (KeyEvent event : events) {309                     queue.enqueueEvent(new MonkeyKeyEvent(event));310                 }311                 return OK;312             }313             return EARG;314         }</string>
代碼6-4-2 TypeCommand - translateCommand

   

299-299行: 在命令字串列表中取得type命令的參數(shù)line,也就是一大串需要輸入的字符串了,

電腦資料

第6章4節(jié)《MonkeyRunner源碼剖析》Monkey原理分析事件源事件源概覽翻譯命令》(http://www.szmdbiao.com)。然后把該字符串每個字符拆散開來建立一個字符數(shù)組chars,因為下面獲得每個字符對應(yīng)的系統(tǒng)按鍵事件KeyEvent的的方法接受的參數(shù)就是字符數(shù)組

304-305行: KeyCharacterMap的getEvents方法官方的解析是用來根據(jù)提供的字符數(shù)據(jù)流生成一個對應(yīng)按鍵事件數(shù)組,所以這里的意義就是為輸入字串的每一個字符都產(chǎn)生一個按鍵事件,然后組織成一個按鍵事件隊列返回給events變量。這里需要提下的是KeyEvent在Android系統(tǒng)中代表一個按鍵事件,它內(nèi)部擁有的每個按鍵對應(yīng)的值以及按鍵對應(yīng)的Action如ACTION_DOWN/ACTION_UP等等的定義

308-309行: 根據(jù)按鍵事件創(chuàng)建一個MonkeyKeyEvent實例,并把該事件放到傳進來的命令隊列里面等待執(zhí)行

    這一小節(jié)結(jié)合TypeCommand這個命令翻譯類我們看到了MonkeySourceNetwork從網(wǎng)絡(luò)獲得一個字串命令后是如何通過調(diào)用自身的translateCommand方法來解析出里面的命令和參數(shù),然后根據(jù)命令來查找COMMAND_MAP來獲得對應(yīng)的命令翻譯類實例,最后通過命令翻譯類的translateCommand來根據(jù)命令字串創(chuàng)建對應(yīng)的MonkeyEvent的并把它加入到命令隊列中。

    在下一小節(jié)我們就去學習下這個MonkeyEvent和命令隊列的相關(guān)知識。

   

最新文章