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

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

移動開發 Android
執行完這些IdleHandler之后,線程下次調用nativePollOnce函數時,就不設置超時時間了,因為,很有可能在執行IdleHandler的時候,已經有新的消息加入到消息隊列中去了。

執行完這些IdleHandler之后,線程下次調用nativePollOnce函數時,就不設置超時時間了。

因為,很有可能在執行IdleHandler的時候,已經有新的消息加入到消息隊列中去了。

正因為如此,

要重置nextPollTimeoutMillis的值:

  1. [java] view plaincopy// While calling an idle handler, a new message could 
  2. ve been delivered 
  3. // so go back and look again for a pending message without waiting. 
  4. nextPollTimeoutMillis = 0

分析完MessageQueue的這個next函數之后,我們就要深入分析一下JNI方法nativePollOnce了,看看它是如何進入等待狀態的, 這個函數定義在frameworks/base/core/jni/android_os_MessageQueue.cpp文件中:

  1.   [cpp] view plaincopystatic void 
  2. android_os_MessageQueue_nativePollOnce(JNIEnv* env, jobject obj, 
  3.   jint ptr, jint timeoutMillis) { 
  4.   NativeMessageQueue* nativeMessageQueue = 
  5. reinterpret_cast(ptr); 
  6.   nativeMessageQueue->pollOnce(timeoutMillis); 
  7.   } 

這個函數首先是通過傳進入的參數ptr取回前面在Java層創建MessageQueue對象時在JNI層創建的NatvieMessageQueue對象,然后調用它的pollOnce函數:

  1. [cpp] view plaincopyvoid NativeMessageQueue::pollOnce(int timeoutMillis) 
  2.  
  3.  mLooper->pollOnce(timeoutMillis); 
  4.  } 

這里將操作轉發給mLooper對象的pollOnce函數處理,這里的mLooper對象是在C++層的對象,它也是在前面在JNI層創建的 NatvieMessageQueue對象時創建的,它的pollOnce函數定義在frameworks/base/libs/utils /Looper.cpp文件中:

  1. [cpp] view plaincopyint Looper::pollOnce(int timeoutMillis, int* outFd, 
  2. t* outEvents, void** outData) { 
  3. int result = 0
  4. for (;;) { 
  5. ...... 
  6. if (result != 0) { 
  7. ...... 
  8. return result; 
  9. result = pollInner(timeoutMillis); 

為了方便討論,我們把這個函數的無關部分都去掉,它主要就是調用pollInner函數來進一步操作,如果pollInner返回值不等于0,這個函數就可以返回了。

函數pollInner的定義如下:

  1. [cpp] view plaincopyint Looper::pollInner(int timeoutMillis) { 
  2. ...... 
  3. int result = ALOOPER_POLL_WAKE; 
  4. ...... 
  5. #ifdef LOOPER_USES_EPOLL 
  6. struct epoll_event eventItems[EPOLL_MAX_EVENTS]; 
  7. int eventCount = epoll_wait(mEpollFd, eventItems, EPOLL_MAX_EVENTS, 
  8. meoutMillis); 
  9. bool acquiredLock = false
  10. #else 
  11. ...... 
  12. #endif 
  13. if (eventCount < 0) { 
  14. if (errno == EINTR) { 
  15. goto Done; 
  16. LOGW("Poll failed with an unexpected error, errno=%d", errno); 
  17. result = ALOOPER_POLL_ERROR; 
  18. goto Done; 
  19. if (eventCount == 0) { 
  20. ...... 
  21. result = ALOOPER_POLL_TIMEOUT; 
  22. goto Done; 
  23. ...... 
  24. #ifdef LOOPER_USES_EPOLL 
  25. for (int i = 0; i < eventCount; i++) { 
  26. int fd = eventItems[i].data.fd; 
  27. uint32_t epollEvents = eventItems[i].events; 
  28. if (fd == mWakeReadPipeFd) { 
  29. if (epollEvents & EPOLLIN) { 
  30. awoken(); 
  31. else { 
  32. LOGW("Ignoring unexpected epoll events 0x%x on wake read pipe."
  33. ollEvents); 
  34. else { 
  35. ...... 
  36. if (acquiredLock) { 
  37. mLock.unlock(); 
  38. Done: ; 
  39. #else 
  40. ...... 
  41. #endif 
  42. ...... 
  43. return result; 

 

責任編輯:閆佳明 來源: 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:48:50

Android消息處理機制Looper

2014-05-22 15:41:59

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定時器

2011-03-17 09:20:05

異常處理機制

2021-08-12 16:28:10

AndroidHandleLooper

2009-07-17 10:42:06

Swing應用程序處理函數

2023-03-08 08:54:59

SpringMVCJava

2023-06-15 14:09:00

解析器Servlet容器
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 久久精品亚洲精品国产欧美 | 亚洲va欧美va人人爽午夜 | 视频在线一区二区 | 91九色porny首页最多播放 | 日本在线观看视频 | 成人毛片一区二区三区 | 精品视频久久久 | 日韩欧美在线观看一区 | 日韩一区二区在线播放 | 亚洲精品久久久久中文字幕二区 | 国产91丝袜在线熟 | 中文字幕成人网 | 中文字幕一区二区三区乱码在线 | 国产精品人人做人人爽 | 精品欧美乱码久久久久久1区2区 | 国产不卡视频 | 亚洲成人二区 | www.色综合| 国产精品一区二区视频 | 6996成人影院网在线播放 | 久久久久久国产 | 国产av毛片 | av黄色在线 | 成人午夜精品 | 中文字幕一区二区三区在线乱码 | 欧美在线a | 人人艹人人爽 | 日本一区视频在线观看 | 国产精品成人69xxx免费视频 | 国产欧美日韩一区 | 国产精品欧美一区二区三区 | 亚洲成人网在线观看 | 国产激情一区二区三区 | 久久男人| 中文字幕亚洲精品 | 精品一区二区三区在线观看 | 精品成人在线视频 | 欧美lesbianxxxxhd视频社区 | www.婷婷 | 国产真实乱对白精彩久久小说 | 国产精品成人一区二区三区夜夜夜 |