android 4.0.1 webkit Event 事件處理過程分析

鍵值經由android的GUI事件機制傳給了WebView.java
webview.java的onKeyDown()中會對感興趣的鍵值作處理,這些鍵值可能不會再被傳給webkit(其實就是WebViewClient.java中的shouldOverrideKeyEvent方法)。
webview.java的onKeyDown中通過調用mWebViewCore.sendMessage()將需要webkit處理的鍵值通過webviewcore.java傳給webkit.
webviewcore.java的sendMessage進一步將這個event傳給它自身的EventHub中進行處理。
EventHub封裝了Handler,消息在EventHub的transferMessages()中處理。
對於KEY_DOWN事件會調用webviewcore.java的key()函數處理。

最終通過jni調到webviewcore.cpp的key()函數,這個函數將鍵值交給EventHandler來處理。這樣事件就傳到了webkit 內核。

webkit 不做處理的鍵值在WebViewCore.java的key()函數中會通過webview.java的消息機制再傳回給WebView.java做處理。

webkit內核對鍵值的處理的順序圖如下。

上述過程完成後JSEventListener.cpp會接着調用JSC::call(),這個全局函數會調用Interpreter::executeCall()執行頁面上註冊的鍵值處理函數(即頁面上註冊的onkeydown,onkeypress等)。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章