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 值的类型 在__主线程__中进行不同的操作。
好了,本次博客到此为止。希望大家能够学有所得!
另:转发或转载请注明出处,谢谢合作!