日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
Android應(yīng)用程序消息處理機制(Looper、Handler)分析(5)

這里就是告訴mEpollFd,它要監(jiān)控mWakeReadPipeFd文件描述符的EPOLLIN事件,即當(dāng)管道中有內(nèi)容可讀時,就喚醒當(dāng)前正在等待管道中的內(nèi)容的線程。

C++層的這個looper對象創(chuàng)建好了之后,就返回到JNI層的NativeMessageQueue的構(gòu)造函數(shù),***就返回到Java層的消息 隊 列MessageQueue的創(chuàng)建過程,這樣,Java層的Looper對象就準(zhǔn)備好了。有點復(fù)雜,我們先小結(jié)一下這一步都做了些什么事情:

A. 在Java層,創(chuàng)建了一個Looper對象,這個Looper對象是用來進入消息循環(huán)的,它的內(nèi)部有一個消息隊列MessageQueue對象mQueue;

B. 在JNI層,創(chuàng)建了一個NativeMessageQueue對象,這個NativeMessageQueue對象保存在Java層的消息隊列對象mQueue的成員變量mPtr中;

C. 在C++層,創(chuàng)建了一個Looper對象,保存在JNI層的NativeMessageQueue對象的成員變量mLooper中,這個對象的作用是,當(dāng) Java層的消息隊列中沒有消息時,就使Android應(yīng)用程序主線程進入等待狀態(tài),而當(dāng)Java層的消息隊列中來了新的消息后,就喚醒Android應(yīng) 用程序的主線程來處理這個消息。

接著還要通過epoll_ctl函數(shù)來告訴epoll要監(jiān)控相應(yīng)的文件描述符的什么事件:

 
 
  1.   [cpp] view plaincopystruct epoll_event eventItem; 
  2.   memset(& eventItem, 0, sizeof(epoll_event)); // zero out unused members 
  3. of data field union 
  4.   eventItem.events = EPOLLIN; 
  5.   eventItem.data.fd = mWakeReadPipeFd; 
  6.   result = epoll_ctl(mEpollFd, EPOLL_CTL_ADD, mWakeReadPipeFd, & 
  7. eventItem);

回到ActivityThread類的main函數(shù)中,在上面這些工作都準(zhǔn)備好之后,就調(diào)用Looper類的loop函數(shù)進入到消息循環(huán)中去了:

 
 
  1. [cpp] view plaincopypublic class Looper { 
  2. ...... 
  3. public static final void loop() { 
  4. Looper me = myLooper(); 
  5. MessageQueue queue = me.mQueue; 
  6. ...... 
  7. while (true) { 
  8. Message msg = queue.next(); // might block 
  9. ...... 
  10. if (msg != null) { 
  11. if (msg.target == null) { 
  12. // No target is a magic identifier for the quit message. 
  13. return; 
  14. ...... 
  15. msg.target.dispatchMessage(msg); 
  16. ...... 
  17. msg.recycle(); 
  18. ...... 

這里就是進入到消息循環(huán)中去了,它不斷地從消息隊列mQueue中去獲取下一個要處理的消息msg,如果消息的target成員變量為null,就表示要 退出消息循環(huán)了,否則的話就要調(diào)用這個target對象的dispatchMessage成員函數(shù)來處理這個消息,這個target對象的類型為 handler,下面我們分析消息的發(fā)送時會看到這個消息對象msg是如設(shè)置的。


當(dāng)前標(biāo)題:Android應(yīng)用程序消息處理機制(Looper、Handler)分析(5)
路徑分享:http://www.5511xx.com/article/djejojg.html