我一直在尋找在Android文檔的postDelayed post delayed documentationpostDelayed是否會導致郵件跳到隊列的前端?
這類似於另一個問題 - https://stackoverflow.com/questions/25820528/is-postdelayed-relative-to-when-message-gets-on-the-queue-or-when-its-the-actual - 我有一段時間回來,但它是一個不同的情況(和措辭在我心中更加清晰)
基本上是繼承人文檔對此方法的說明 - 「導致Runnable被添加到消息隊列中,並在指定的時間過後運行,runnable將在用戶界面線程上運行。」
我知道每個線程都有一個消息隊列,循環和處理程序與之相關聯。 - What is the relationship between Looper, Handler and MessageQueue in Android?。 根據「在指定的時間過後運行」,如果您傳入0作爲delayMillis的參數,並且消息隊列中仍有消息,則帶0的消息是否會跳過其餘消息(消息隊列中直接由循環者處理)?我知道looper會將消息發送到Handler的handleMessage()方法 - 從How the Looper knows to send the message to Handler?。我會自己測試一下,但我不知道你會怎麼做。
謝謝,但我認爲一個例子會清除它更多。假設我調用postDelayed(new Runnable(){....},50000)。這會在消息隊列的前面出現,因爲消息隊列中沒有其他內容。如果我添加另一個runnable,比如說post(new Runnable(){...}),那麼這個runnable必須等待50秒,因爲第一個帖子的「阻止操作」,因爲第一個帖子必須等待很長時間才能執行? – committedandroider 2014-12-02 04:06:04
不,隊列的順序是由與消息關聯的時間決定的。對於未延遲的消息,這是當前時間。對於延遲的消息,它是當前時間加上延遲。因此,如果您不加延遲地排隊新消息,它將會跳過(放置在尚未達到交付時間的延遲消息之前)。更新了我的答案以提供此詳細信息。 – iagreen 2014-12-02 04:10:35