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

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

移動(dòng)開發(fā) Android
什么情況下,線程會(huì)進(jìn)入等待狀態(tài)呢??jī)煞N情況,一是當(dāng)消息隊(duì)列中沒有消息時(shí),它會(huì)使線程進(jìn)入等待狀態(tài);;二是消息隊(duì)列中有消息,但是消息指定了執(zhí)行的時(shí)間,而現(xiàn)在還沒有到這個(gè)時(shí)間,線程也會(huì)進(jìn)入等待狀態(tài)。消息隊(duì)列中的消息是按時(shí)間先后來排序的,后面我們?cè)诜?析消息的發(fā)送時(shí)會(huì)看到。

調(diào)用以下函數(shù)的時(shí)候,有可能會(huì)讓線程進(jìn)入等待狀態(tài)。

什么情況下,線程會(huì)進(jìn)入等待狀態(tài)呢?

兩種情況,一是當(dāng)消息隊(duì)列中沒有消息時(shí),它會(huì)使線程進(jìn)入等待狀態(tài);;二是消息隊(duì)列中有消息,但是消息指定了執(zhí)行的時(shí)間,而現(xiàn)在還沒有到這個(gè)時(shí)間,線程也會(huì)進(jìn)入等待狀態(tài)。

消息隊(duì)列中的消息是按時(shí)間先后來排序的,后面我們?cè)诜? 析消息的發(fā)送時(shí)會(huì)看到。

這個(gè)函數(shù)最關(guān)鍵的地方便是從消息隊(duì)列中獲取下一個(gè)要處理的消息了,即MessageQueue.next函數(shù),它實(shí)現(xiàn)frameworks/base/core/java/android/os/MessageQueue.java文件中:

  1. [java] view plaincopypublic class MessageQueue { 
  2. ...... 
  3. final Message next() { 
  4. int pendingIdleHandlerCount = -1// -1 only during first iteration 
  5. int nextPollTimeoutMillis = 0
  6. for (;;) { 
  7. if (nextPollTimeoutMillis != 0) { 
  8. Binder.flushPendingCommands(); 
  9. nativePollOnce(mPtr, nextPollTimeoutMillis); 
  10. synchronized (this) { 
  11. // Try to retrieve the next message. Return if found. 
  12. final long now = SystemClock.uptimeMillis(); 
  13. final Message msg = mMessages; 
  14. if (msg != null) { 
  15. final long when = msg.when; 
  16. if (now >= when) { 
  17. mBlocked = false
  18. mMessages = msg.next; 
  19. msg.next = null
  20. if (Config.LOGV) Log.v("MessageQueue""Returning message: " + msg); 
  21. return msg; 
  22. else { 
  23. nextPollTimeoutMillis = (int) Math.min(when - now, Integer.MAX_VALUE); 
  24. else { 
  25. nextPollTimeoutMillis = -1
  26. // If first time, then get the number of idlers to run. 
  27. if (pendingIdleHandlerCount < 0) { 
  28. pendingIdleHandlerCount = mIdleHandlers.size(); 
  29. if (pendingIdleHandlerCount == 0) { 
  30. // No idle handlers to run. Loop and wait some more. 
  31. mBlocked = true
  32. continue
  33. if (mPendingIdleHandlers == null) { 
  34. mPendingIdleHandlers = new IdleHandler[Math.max(pendingIdleHandlerCount, 
  35. ]; 
  36. mPendingIdleHandlers = mIdleHandlers.toArray(mPendingIdleHandlers); 
  37. // Run the idle handlers. 
  38. // We only ever reach this code block during the first iteration. 
  39. for (int i = 0; i < pendingIdleHandlerCount; i++) { 
  40. final IdleHandler idler = mPendingIdleHandlers[i]; 
  41. mPendingIdleHandlers[i] = null// release the reference to the handler 
  42. boolean keep = false
  43. try { 
  44. keep = idler.queueIdle(); 
  45. catch (Throwable t) { 
  46. Log.wtf("MessageQueue""IdleHandler threw exception", t); 
  47. if (!keep) { 
  48. synchronized (this) { 
  49. mIdleHandlers.remove(idler); 
  50. // Reset the idle handler count to 0 so we do not run them again. 
  51. pendingIdleHandlerCount = 0
  52. // While calling an idle handler, a new message could have been 
  53. livered 
  54. // so go back and look again for a pending message without waiting. 
  55. nextPollTimeoutMillis = 0
  56. ...... 
  57. }

執(zhí)行下面語句是看看當(dāng)前消息隊(duì)列中有沒有消息:

  1. [java] view plaincopynativePollOnce(mPtr, nextPollTimeoutMillis); 

這是一個(gè)JNI方法,我們等一下再分析,這里傳入的參數(shù)mPtr就是指向前面我們?cè)贘NI層創(chuàng)建的NativeMessageQueue對(duì)象了,而參數(shù) nextPollTimeoutMillis則表示如果當(dāng)前消息隊(duì)列中沒有消息,它要等待的時(shí)候,for循環(huán)開始時(shí),傳入的值為0,表示不等待。

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

2014-05-22 14:57:28

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

2014-05-22 15:15:53

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ī)制

2014-05-27 14:44:26

AndroidActivitysingleTask

2021-08-12 16:28:10

AndroidHandleLooper

2009-07-17 10:42:06

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

2023-03-08 08:54:59

SpringMVCJava
點(diǎn)贊
收藏

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

主站蜘蛛池模板: 欧洲高清转码区一二区 | 欧美激情久久久 | 国产综合视频 | 国产精品一区二区三区在线 | 国产精品久久久久久久久久久免费看 | 欧美日韩视频在线第一区 | 欧美激情精品久久久久 | 国产精品1区2区3区 一区中文字幕 | 国产精品视频久久久久久 | 日韩精品一区二区三区老鸭窝 | 亚洲精品一区二区三区丝袜 | 99久久精品免费看国产四区 | 成人免费在线播放视频 | 欧美成人a| 久久精品久久久久久 | 国产主播第一页 | 在线观看亚洲专区 | 国产97在线 | 日韩 | 久久国产欧美一区二区三区精品 | 亚洲日本欧美日韩高观看 | www国产成人免费观看视频,深夜成人网 | 天堂亚洲 | 亚洲精品国产成人 | 久久久久久av | 日韩一区不卡 | 国产午夜精品久久久 | 91视视频在线观看入口直接观看 | 亚洲国产精品一区二区久久 | 蜜桃精品噜噜噜成人av | 亚洲日本成人 | 欧美在线免费 | 久久久久国产 | 精品亚洲一区二区三区四区五区 | 一级毛片成人免费看a | 黄色在线播放视频 | 欧美成人精品一区二区男人看 | 亚州一区二区三区 | av在线免费网 | www..99re | 亚洲午夜在线 | 日韩精品在线免费观看 |