安卓 訊息佇列 優先順序 順序

2022-04-29 15:03:06 字數 1796 閱讀 5122

韓夢飛沙 yue31313 韓亞飛 han_meng_fei_sha [email protected]

一般的像我們普通呼叫handler傳送訊息,最後都會呼叫messagequeue的enqueuemessage。

[cpp]view plain

copy

public boolean sendmessageattime(message msg, long uptimemillis)   

return enqueuemessage(queue, msg, uptimemillis);  

}  像sendmessageatfrontofqueue這樣只是最後的時間設定為0,自然就排在佇列的前面了。

[cpp]view plain

copy

public final boolean sendmessageatfrontofqueue(message msg)   

return enqueuemessage(queue, msg, 0);  

}  private boolean enqueuemessage(messagequeue queue, message msg, long uptimemillis)   

return queue.enqueuemessage(msg, uptimemillis);  

}  最後就到messagequeue的enqueuemessage函式中去了,該函式就是根據when把這個msg插入到合適的訊息佇列中。

[cpp]view plain

copy

boolean enqueuemessage(message msg, long when)  else   

if (needwake && p.isasynchronous())   

}  msg.next = p; // invariant: p == prev.next  

prev.next = msg;//這其實就是把該message插入合適的位置  

}  // we can assume mptr != 0 because mquitting is false.  

if (needwake)   

}  return true;  

}  最後我們再看下messagequeue的next函式,就是訊息執行緒迴圈時會不斷呼叫messagequeue的next來獲取當前訊息。

[cpp]view plain

copy

message next()   

int pendingidlehandlercount = -1; // -1 only during first iteration  

int nextpolltimeoutmillis = 0;  

for (;;)   

nativepollonce(ptr, nextpolltimeoutmillis);//c層的epoll函式會阻塞  

synchronized (this)  while (msg != null && !msg.isasynchronous());  

}  if (msg != null)  else  else   

msg.next = null;  

if (debug) log.v(tag, "returning message: " + msg);  

msg.markinuse();  

return msg;  

}  } else   

......  

安卓ui執行緒優先順序

b own.settag tag installing updatedownloadbtnstate b own,game,downloadstate.finished 更新按鈕狀態 此方法包含按鈕文字和顏色 modmgr.getgamedownloadmgr installapk context,...

佇列 優先順序佇列

優先順序佇列的隊尾是不需要改變的,永遠在低下標處。當佇列增加資料時,隊頭的位置就是資料項的大小減去1.public class priorityq 插入 public void insert long item else quearray j 1 item nitem 刪除 public long ...

優先順序佇列

分為最小優先順序佇列和最大優先順序佇列。優先順序佇列是一種用來維護一組元素構成的集合s的資料結構,這一組元素都有乙個關鍵字key,乙個最大優先順序佇列支援的操作 insert s,x 把x插入到集合s中 maxmum s 返回s中最大元素 extra max s 去掉s中最大關鍵字並返回該最大關鍵子...