訊息機制多用於執行緒間通訊,更新ui等。
最近碰到乙個應用場景,按下按鍵需要更新一下ui。這樣的情況只需要按鍵時由handler傳送乙個訊息即可。但是極端的情況是按鍵按的太快,更新ui有延時,這就會導致訊息堆疊,ui更新阻塞。乙個解決辦法是將按鍵事件拆成onkeydown很onkeyup。在onkeyup裡發訊息,在onkeydown裡清除還沒有來的及處理的訊息。這樣每次處理的訊息都是來的及處理的,來不及處理的都被清除掉了,不會出現訊息堆疊的情況。
看了下文件,handler有個方法removemessages(int)可以清楚沒有處理的訊息。google了一把,有人說是removemessages(0)就是清除所有訊息,令我吃驚。
文件是這樣的remove any pending posts of messages with code 'what' that are in the message queue.大意是從訊息佇列中移除所有與what對應的沒有處理的訊息。注意是what值對應的訊息,並不是所有訊息。
測試**:
private handler mhandler = new handler()
};int count = 0;
@override
public boolean onkeydown(int keycode, keyevent event)
@override
public boolean onkeyup(int keycode, keyevent event)
延時500ms,500ms以內的訊息都被移除了。將mhandler.removemessages(count)改為mhandler.removemessages(0)後只有what為0的訊息被移除。 Android 清除訊息
訊息機制多用於執行緒間通訊,更新ui等。最近碰到乙個應用場景,按下按鍵需要更新一下ui。這樣的情況只需要按鍵時由handler傳送乙個訊息即可。但是極端的情況是按鍵按的太快,更新ui有延時,這就會導致訊息堆疊,ui更新阻塞。乙個解決辦法是將按鍵事件拆成onkeydown很onkeyup。在onkey...
android清除快取
現在程式中一般都是有快取顯示並且清除快取操作的,那麼具體是怎麼來實現的呢?其實很簡單,乙個utils就搞定了,下面就給大家粘出來 清除快取 param context public static void clearallcache context context private static bo...
Android清除本地資料
1.清除手機應用快取 外部快取 資料庫 file sharedpreference和自定義資料夾下的目錄 自 public class datacleanutil 清除本應用內部快取 data data com.cache param context public static void clean...