成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Android應用程序消息處理機制(Looper、Handler)分析(9)

移動開發 Android
這里我們只關注mWakeReadPipeFd文件描述符上的事件,如果在mWakeReadPipeFd文件描述符上發生了EPOLLIN就說明應用程 序中的消息隊列里面有新的消息需要處理了,接下來它就會先調用awoken函數清空管道中把內容,以便下次再調用pollInner函數時,知道自從上次 處理完消息隊列中的消息后,有沒有新的消息加進來。

這里,首先是調用epoll_wait函數來看看epoll專用文件描述符mEpollFd所監控的文件描述符是否有IO事件發生,它設置監控的超時時間為timeoutMillis:

  1. [cpp] view plaincopyint eventCount = epoll_wait(mEpollFd, eventItems, 
  2. EPOLL_MAX_EVENTS, timeoutMillis); 

回憶一下前面的Looper的構造函數,我們在里面設置了要監控mWakeReadPipeFd文件描述符的EPOLLIN事件。

當mEpollFd所監控的文件描述符發生了要監控的IO事件后或者監控時間超時后,線程就從epoll_wait返回了,否則線程就會在epoll_wait函數中進入睡眠狀態了。

返回后如果eventCount等于0,就說明是超時了:

  1. [cpp] view plaincopyif (eventCount == 0) { 
  2. ...... 
  3. result = ALOOPER_POLL_TIMEOUT; 
  4. goto Done; 

如果eventCount不等于0,就說明發生要監控的事件:

  1.  [cpp] view plaincopyfor (int i = 0; i < eventCount; i++) { 
  2.   int fd = eventItems[i].data.fd; 
  3.   uint32_t epollEvents = eventItems[i].events; 
  4.   if (fd == mWakeReadPipeFd) { 
  5.   if (epollEvents & EPOLLIN) { 
  6.   awoken(); 
  7.   } else { 
  8.   LOGW("Ignoring unexpected epoll events 0x%x on wake read pipe."
  9. epollEvents); 
  10.   } 
  11.   } else { 
  12.   ...... 
  13.   } 
  14.   } 

這里我們只關注mWakeReadPipeFd文件描述符上的事件,如果在mWakeReadPipeFd文件描述符上發生了EPOLLIN就說明應用程 序中的消息隊列里面有新的消息需要處理了,接下來它就會先調用awoken函數清空管道中把內容,以便下次再調用pollInner函數時,知道自從上次 處理完消息隊列中的消息后,有沒有新的消息加進來。

函數awoken的實現很簡單,它只是把管道中的內容都讀取出來:

  1. [cpp] view plaincopyvoid Looper::awoken() { 
  2. ...... 
  3. char buffer[16]; 
  4. ssize_t nRead; 
  5. do { 
  6. nRead = read(mWakeReadPipeFd, buffer, sizeof(buffer)); 
  7. while ((nRead == -1 && errno == EINTR) || nRead == 
  8. zeof(buffer)); 

因為當其它的線程向應用程序的消息隊列加入新的消息時,會向這個管道寫入新的內容來通知應用程序主線程有新的消息需要處理了,下面我們分析消息的發送的時候將會看到。

這樣,消息的循環過程就分析完了,這部分邏輯還是比較復雜的,它利用Linux系統中的管道(pipe)進程間通信機制來實現消息的等待和處理,不過,了解了這部分內容之后,下面我們分析消息的發送和處理就簡單多了。

責任編輯:閆佳明 來源: bbs.9ria
相關推薦

2014-05-22 15:00:16

Android消息處理機制Looper

2014-05-22 15:04:00

Android消息處理機制Looper

2014-05-22 15:07:44

Android消息處理機制Looper

2014-05-22 15:38:27

Android消息處理機制Looper

2014-05-22 15:48:50

Android消息處理機制Looper

2014-05-22 14:57:28

Android消息處理機制Looper

2014-05-22 15:15:53

Android消息處理機制Looper

2014-05-22 15:18:25

Android消息處理機制Looper

2014-05-22 15:33:31

Android消息處理機制Looper

2014-05-22 15:45:58

Android消息處理機制Looper

2011-04-28 11:01:40

Android消息處理LooperHandler

2011-11-23 09:33:45

HandlerLooperMessage

2014-05-27 10:13:57

移動技術半月刊

2016-10-21 13:03:18

androidhandlerlooper

2011-09-05 17:40:40

MTK定時器

2014-05-27 15:07:07

AndroidActivitysingleTask

2011-03-17 09:20:05

異常處理機制

2021-08-12 16:28:10

AndroidHandleLooper

2009-07-17 10:42:06

Swing應用程序處理函數

2023-06-15 14:09:00

解析器Servlet容器
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 中文字幕国产日韩 | 欧美一级二级三级视频 | 亚洲成人网在线播放 | 色婷婷综合久久久久中文一区二区 | 成人在线影视 | 免费看黄视频网站 | 国产精品久久久久久久久久尿 | 国产精品成人一区二区三区 | 99久久99 | 不卡一区二区三区四区 | 国产ts人妖系列高潮 | 久久久久免费精品国产 | 日本欧美国产在线 | 亚洲中午字幕 | 看羞羞视频免费 | 精品一区二区三区入口 | 精品日韩欧美一区二区 | 日韩欧美亚洲一区 | 中文字幕视频在线观看 | 欧美激情精品久久久久久 | 国产一二三视频在线观看 | 在线欧美视频 | 欧美日韩亚洲国产 | 精品免费视频 | www成人免费| 日韩高清国产一区在线 | 黄色大片网站 | 在线视频91 | 欧美性生活免费 | 精品国产欧美一区二区三区成人 | 性高湖久久久久久久久3小时 | 91久久久久久久久 | 免费1区2区3区 | 美女国产精品 | 国产一级一级毛片 | 国产免费一区二区三区网站免费 | 亚洲精品国产成人 | 亚洲风情在线观看 | 精品一区二区三区四区五区 | 亚洲精品www久久久 www.蜜桃av | 九九免费在线视频 |