android Message 機制 的代碼示例
主線程代碼
private Handler handler = new Handler(){
@Override
public void handleMessage(@NonNull Message msg) {
super.handleMessage(msg);
if(msg.what == 0x200){
//主線程操作
}
}
};
注:msg.what 可以在創建message時自定義,用來區分message的類型
子線程代碼:請求服務器數據爲例
final FormBody body = bodyBuilder.add("classification","year/month/day").build();
new Thread(new Runnable() {
@Override
public void run() {
try {
//post 方式 進行數據請求
Response response = HttpUtil.doPost(url,body);
//獲取響應中的JSON字符串
String str = response.body().string();
recordList = JSONUtil.getRecordList(str); /*解析JSON字符串,獲得記錄鏈表*/
Message msg = Message.obtain();/*創建Message*/
msg.what = 0x200; /*設定msg.what -> 消息類型*/
msg.obj = recordList; /* msg.obj -> 消息攜帶的數據*/
handler.sendMessage(msg); /*發送給主線程的handler 進行相應處理*/
} catch (IOException e) {
e.printStackTrace();
}
}
}).start();
在子線程的代碼中,網絡請求的代碼跟主旨無關,暫且不管。Message機制中,子線程通過Message.obtain()的方法從MessagePool中獲取一個消息對象,程序員可以對這個對象進行<what(消息類型) , obj(消息攜帶的數據)>的賦值,從而可以實現將數據從子線程傳遞到主線程。
主線程通過判斷 msg.what 值的類型 在__主線程__中進行不同的操作。
好了,本次博客到此爲止。希望大家能夠學有所得!
另:轉發或轉載請註明出處,謝謝合作!