Message 产品
MessageQueue 仓库
Looper 循环
Handler 物流
Handler.Callback 回调接口
主线程不能做耗时操作
子线程不能操作绝大多数UI控件
在子线程能做的事情尽量不要在主线程中去做。例如,int转为字符串。
private TextView textView;
private Handler handler = new Handler(new Handler.Callback() {
@Override
public boolean handleMessage(Message message) { //handler要怎么处理message
switch (message.what) {
case 0:
textView.setText((String) message.obj);
break;
}
return true;
}
});
方法1
new Thread(new Runnable() {
@Override
public void run() {
for (int i = 0; i < 100; i++) {
SystemClock.sleep(1000);//睡眠一秒
// Message message = new Message(); 不推荐使用
Message message = Message.obtain();//obtain获得一个message对象,从一个池中,当message用过之后会被放到池中,直接拿来使用不需再创建
message.what = 0; //表示这个message 是做什么的
message.obj = String.valueOf(i);//obj 存放Object类型,arg1 ,arg2 存放int型,setData 存放Bundle 类型数据
// message.sendToTarget(); 发送message
handler.sendMessage(message); //发送消息
}
}
}).start();
方法2
Message message = Message.obtain();里的参数可以写handler,和what ,obj,arg1,arg2
如果有handler参数,则可以通过message.sendToTarget();发送消息。
效果跟上面相同
Message message = Message.obtain(handler, 0, String.valueOf(i));
message.sendToTarget();
方法3
handler.obtainMessage(0, String.valueOf(i)).sendToTarget();