Android深入分析NativeMessageQueue和Looper.cpp(Native層消息機制)


  繼續上一篇分析的Android Framework Java層的MessageQueue和Looper,我們這篇要看的是Native層的實現原理、

   提前准備的知識點是Linux里面的Epoll機制

   涉及到的代碼目錄

   / system / core / include / utils / Looper.h
   

   先看框架圖
   

一:NativeMessageQueue實現

先看一下Native接口的注冊



我們其實關心的是Java層的MessageQueue構建的時候會調用android_os_MessageQueue_nativeinit()
我們看一下這個函數的實現









看一下NativeMessageQueue()構造函數



然后第二個函數就是Java層調用next()函數的時候會調用nativePollOnce()函數,然后我給的結論是先處理native層的消息看一下它的實現


繼續看pollOnce()函數


所以現在目前核心類就是Looper對象,所以要提前准備好Epoll機制否則下文就看不懂了
為什么說Looper.cpp是Android 的Epoll封裝?

1:看一下Looper的構造函數作了什么





到這Native層的Looper在創建的時候會調用epoll_create()函數來創建epoll,那我們只需要看什么時候調用epoll的另外兩個函數epoll_ctrl 和 epoll_wait就能明白了



Java層在調用poll_once的時候Native層會調用epoll_wait等待消息的觸發

如果Epoll機制有不了解的可以參考博文http://gityuan.com/2015/12/06/linux_epoll/

下一篇我將介紹Native層Looper.cpp實戰Demo讓你明白Looper就是epoll的封裝





注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2020 ITdaan.com