相关文章:
Android 知识点总结(目录) https://blog.csdn.net/a136447572/article/details/81027701、
Handler能够让你发送和处理消息,以及Runnable对象;每个Handler对象对应一个Thread和
Thread的消息队列。当你创建一个Handler时,它就和Thread的消息队列绑定在一起,然后就可以
传递消息和runnable对象到消息队列中,执行消息后就从消息队列中退出。
Handler的作用就是:调度消息和runnable对象去被执行;使动作在不同的线程中被执行。
当一个应用程序中进程被创建时,它的主线程专门运行消息队列(messageQueue),去管
理顶层的应用程序相关的对象如:activity,broadcastReceiver,windows等,你可以创建你
的Thread,和主线程进行交互——通过Handler,交互的方法就是通过post或者sendMessage。
但是在你的新线程中,给定的Message或者Runnable,会在适当的时候的被调度和处理。
(即不会被立即处理——阻塞式)。
无 looper 在线程中发送
handler.sendEmptyMessage(0x11);//无携带数据发送
Message msg = new Message();
Bundle bundle = new Bundle();
bundle.putString("key","value");
msg.setData(bundle);
msg.what = 0x12 ;
handler.sendMessage(msg); //有携带数据发送
定义Handler
Handler handler = new Handler(){
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
if (msg.what == 0x11){
Log.i("info","处理正常逻辑");
}
if (msg.what == 0x12){
Bundle bundle = msg.getData();
String value = bundle.getString("key");
Log.i("info","value="+value );
}
}
};
Thread与 HandlerThread 的区别
Thread 中没有looper HandlerThread 中系统默认创建Looper 可通过Handler 进行消息的传递
创建子线程的Handler
HandlerThread handlerThread = new HandlerThread("HandlerThread");
handlerThread.start();
Handler mHandler = new Handler(handlerThread.getLooper()){
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
if (msg.what==0x11){
new Timer().schedule(new TimerTask() {
@Override
public void run() {
ss++;
//处理耗时的功能 处理完后发送到主线程的Handler
Message msgd = new Message();
Bundle bundle = new Bundle();
bundle.putString("key",""+ss);
msgd.setData(bundle);
msgd.what = 0x12 ;
zHandler.sendMessage(msgd);
}
}, 1000,1000);
}
}
};
mHandler.sendEmptyMessage(0x11);
主线程中的Handler
Handler zHandler = new Handler(){
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
if (msg.what == 0x12){
Bundle bundle = msg.getData();
String value = bundle.getString("key");
text1.setText(value+"");
}
}
};