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

Android應(yīng)用程序消息處理機(jī)制(Looper、Handler)分析(5)

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

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

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

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

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

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

接著還要通過(guò)epoll_ctl函數(shù)來(lái)告訴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ù)進(jìn)入到消息循環(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. ...... 

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

責(zé)任編輯:閆佳明 來(lái)源: bbs.9ria
相關(guān)推薦

2014-05-22 14:57:28

Android消息處理機(jī)制Looper

2014-05-22 15:18:25

Android消息處理機(jī)制Looper

2014-05-22 15:33:31

Android消息處理機(jī)制Looper

2014-05-22 15:45:58

Android消息處理機(jī)制Looper

2014-05-22 15:00:16

Android消息處理機(jī)制Looper

2014-05-22 15:04:00

Android消息處理機(jī)制Looper

2014-05-22 15:07:44

Android消息處理機(jī)制Looper

2014-05-22 15:38:27

Android消息處理機(jī)制Looper

2014-05-22 15:48:50

Android消息處理機(jī)制Looper

2014-05-22 15:41:59

Android消息處理機(jī)制Looper

2011-04-28 11:01:40

Android消息處理LooperHandler

2011-11-23 09:33:45

HandlerLooperMessage

2014-05-27 10:13:57

移動(dòng)技術(shù)半月刊

2016-10-21 13:03:18

androidhandlerlooper

2011-09-05 17:40:40

MTK定時(shí)器

2011-03-17 09:20:05

異常處理機(jī)制

2021-08-12 16:28:10

AndroidHandleLooper

2009-07-17 10:42:06

Swing應(yīng)用程序處理函數(shù)

2023-03-08 08:54:59

SpringMVCJava

2023-06-15 14:09:00

解析器Servlet容器
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 久久久精品网站 | 午夜影院黄 | 亚洲夜射 | 天天天操天天天干 | 久久午夜视频 | 亚洲一区久久 | 欧美涩涩网 | 91精品国产91久久久久游泳池 | 精品福利一区二区三区 | 成人免费毛片片v | 免费观看av | av色站| ww 255hh 在线观看 | 日韩精品区 | 天堂成人国产精品一区 | 国产色片 | 激情毛片| 亚洲看片网站 | 日韩视频在线一区 | 久久中文字幕一区 | 国产一二三视频在线观看 | 性精品| 99久久精品免费看国产免费软件 | 成人三区四区 | 成人不卡| 成人性视频在线播放 | 日韩成人一区 | 精品久久国产老人久久综合 | 中文字幕一区二区三区在线观看 | 欧美午夜精品 | 日日摸夜夜添夜夜添精品视频 | 欧美一区二区在线播放 | 日韩在线不卡 | 国产在线观看一区二区三区 | 伊人精品国产 | 国产黄色免费网站 | 91精品国产91久久久久久最新 | 午夜精品久久 | 久久噜噜噜精品国产亚洲综合 | 亚洲精品丝袜日韩 | 成人深夜福利 |