Apache Cordova-Android框架原理研究筆記 II

上一篇筆者簡要分析了Cordova從JS端->Native端的調用過程(以JS Object橋爲例)。本章讓我們來分析下這個過程的反面,也就是從Native端->JS端,Cordova是如何處理的。

老習慣,我們先看一段代碼:
exec.js

nativeToJsModes = {
        // Polls for messages using the JS->Native bridge.
        POLLING: 0,
        // For LOAD_URL to be viable, it would need to have a work-around for
        // the bug where the soft-keyboard gets dismissed when a message is sent.
        LOAD_URL: 1,
        // For the ONLINE_EVENT to be viable, it would need to intercept all event
        // listeners (both through addEventListener and window.ononline) as well
        // as set the navigator property itself.
        ONLINE_EVENT: 2
    }

可以看到Cordova實現了3中模式:POLLING、LOAD_URL和ONLINE_EVENT。筆者這裏重點分析了第一種,也就是POLLING模式,後兩種有機會再做深入研究。下圖大致描述了這個過程。

這裏寫圖片描述

總體來說,過程如下:
1、JS端調用Native API後,如果當前調用消息未處理完成,每隔50ms取一次消息隊列,直到本次調用的消息結束;
2、Native端的插件同樣維護了一個消息隊列;
3、JS端通過Native端暴露的retrieveMessages接口來實現消息的拉取;

另外,通過源代碼我們可以大致分析下Cordova的JS和Native兩端的消息格式大致協議:

1、* 號的消息表示當前Native端仍然有待處理消息,JS端會再拉取一次消息;
2、消息內容的第一個字符如果爲S表示調用成功,F表示調用失敗;
其他的有興趣的可以對照代碼再做分析。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章