關於Handler 的Post方法

2021-07-13 03:44:28 字數 1346 閱讀 6494

我們都知道handler中的post方法,並且也是經常使用它

handler.post(new runnable()});

用它可以更新乙個元件的內容,我們也知道hanlder中也有乙個handler.sendmessage(message msg)方法,這兩個方法有什麼區別呢?先看一下message類中定義乙個私有的變數:runnable callback;

再來看一下handler.post(runnable callback)方法的原始碼:

public final boolean post(runnable r)

再看一下sendmessagedelayed的原始碼:

public final boolean sendmessagedelayed(message msg, long delaymillis)

return sendmessageattime(msg, systemclock.uptimemillis() + delaymillis);

}這裡面有個關鍵就是方法getpostmessage(r)這個方法,他將runnable轉成乙個message,他內部到底幹了什麼呢?看一下他的原始碼:

private final message getpostmessage(runnable r)

這裡面就是將runnable轉化成乙個message,其他看他的**很簡單,就是先獲取乙個空訊息message.obtain(),然後將message中的callback的值設定成runnable,這時候就了解到了message中的callback的作用了!

同時也了解一下view.post(runnable r)方法的作用:看一下例項**:

final button btn = (button)findviewbyid(r.id.btn);

btn.post(new runnable()

}); 

}上面的**就是更新btn中的內容,同樣下面的**也可以達到這種效果:

handler handler = new handler();

final button btn = (button)findviewbyid(r.id.btn);

handler.post(new runnable()

}); 

}不同是這個是用handler.post方法,乙個是用view.post方法,現在來看一下view.post方法的源**:

public boolean post(runnable action) else

return handler.post(action);

}方法中主要的功能**就是attachinfo.mhandler,獲取當前執行緒的hanlder,和我們在乙個執行緒中定義乙個handler的效果是一樣的。

MySQL關於HANDLER命令的說明

官方給出的格式 handler tbl name open as alias handler tbl name read index name value1,value2,where where condition limit handler tbl name read index name whe...

HttpClient的Post和Get方法

1.不帶引數的get請求 不帶引數的get請求 public static void dogetwithoutparameter throws exception 2.帶引數的get請求 代引數的get請求 public static void dogetwithparameter throws e...

post請求contentType編碼方式

contenttype定義 定義http htttps 傳送資訊到伺服器的內容編碼型別,用於表名資料流的型別,伺服器中需要根據不同的資料流形式解析資料。常用型別 原生form的提交方式,將資料變成鍵值對的形式各對之間使用 連線如key value key2 value2,特殊字元需要轉碼,空格變成 ...