2011-11-21 33 views
6

我想了解在android中單擊按鈕時會發生什麼。所以我爲簡單的按鈕點擊設置了幾個斷點。圖片顯示了當點擊一個按鈕時會發生什麼,我的問題是:(GUI生成的事件是由於與GUI交互而產生的事件,例如按鈕點擊,編輯文本等)。循環()應用程序或操作系統循環的主循環?Android如何處理GUI事件?

2-在哪裏ViewRootImpl(處理程序).dispatchMessage(消息)駐留?應用程序還是OS?

3-我可以在主循環中攔截GUI生成的事件嗎?如果是,那麼如何?

4-我們能否安全地假設所有GUI生成的事件都是在ViewRootImpl(handler).handleCallback(Message)中處理的?

enter image description here

回答

2

是Looper.loop()的應用程序或操作系統彎針主循環?

我不知道你認爲「OS looper」是什麼。 Looper在你的過程中運行,如果這就是你的意思。

ViewRootImpl(handler).dispatchMessage(Message)駐留在哪裏?應用程序還是OS?

我不知道你認爲在這種情況下「OS」是什麼。 ViewRootImpl是一個Dalvik編譯的類,它被加載到你的Dalvik虛擬機中,它的代碼在你的進程中執行。否則,你將無法在堆棧跟蹤中看到它。

我可以在主循環中攔截GUI生成的事件嗎?

只有修改固件才能用自己的代碼替換ViewRootImpl等各種類。

我們可以安全地假設所有GUI生成的事件都是在ViewRootImpl(handler).handleCallback(Message)中處理的嗎?

我當然不會這樣做。例如,並非所有應用程序都使用小部件框架(例如遊戲)。