1、handlerThread是什么
1.1HandlerThread本质上是一个线程类,它集成了Thread
1.2HandlerThread有自己的内部Looper对象,可以进行looper循环,在HandlerThread可以创建Handler来发送和处理消息。
1.3通过获取HandlerThread的looper对象传递给Handler对象,可以在handleMessage方法中执行异步任务。
1.4优点是不会有堵塞,减少了对性能的消耗,缺点是不能同时进行多任务的处理,需要等待进行处理,处理效率较低。
1.5与线程池注重并发不同,HandlerThread是一个串行队列。HandlerThread背后只有一个线程。
示例代码:
public classMainActivityextendsAppCompatActivity {
privateHandlerThreadmHandler_thread;
privateHandlermHandler;
@Override
protected voidonCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//创建一个线程,线程名字:handler-thread
mHandler_thread=newHandlerThread("handler_thread");
//开启一个线程
mHandler_thread.start();
//在这个线程中创建一个handler对象
mHandler=newHandler(mHandler_thread.getLooper()){
@Override
public voidhandleMessage(Message msg) {
super.handleMessage(msg);
//这个方法是运行在 handler-thread 线程中的 ,可以执行耗时操作
Log.d("handler ","消息: "+ msg.what+" 线程: "+ Thread.currentThread().getName() );
}
};
}
public voidonMainThread(View view){
//在主线程给handler发送消息
// mHandler.sendEmptyMessage(1);
// Log.d( "handler " , "消息源线程" + Thread.currentThread().getName() ) ;
for(inti =0;i <10;i++) {
mHandler.sendEmptyMessage(i);
}
}
public voidonChildThread(View view){
newThread(newRunnable() {
@Override
public voidrun() {
//在子线程给handler发送数据
mHandler.sendEmptyMessage(2);
Log.d("handler ","消息源线程"+ Thread.currentThread().getName() );
}
}).start();
}
@Override
protected voidonDestroy() {
super.onDestroy();
//释放资源
mHandler_thread.quit();
}
}