HandlerThread主要用在给Handler开辟一个新的线程,HandlerThread有Looper对象,避免了继承Thread时对内部Looper进行设置。在HandlerThread主要使用两个方法:
(1)getLooper()用来获取HandlerThread的Looper对象,用来初始化Handler对象。如果HandlerThread没有started或者isAlive()返回false,getLooper()对象将返回null,如果HandlerThread对象started,这个方法在Looper初始化之前,将一直阻塞。
(1)getLooper()用来获取HandlerThread的Looper对象,用来初始化Handler对象。如果HandlerThread没有started或者isAlive()返回false,getLooper()对象将返回null,如果HandlerThread对象started,这个方法在Looper初始化之前,将一直阻塞。
(2)quit()停止当前的looper,如果HandlerThread没有started或者已经finished,将返回false,否则looper被要求停止循环,返回true。
public class MainActivity extends Activity {
private Button start,cancel;
private Handler handler;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
start = (Button)findViewById(R.id.button1);
start.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
handler.sendEmptyMessage(0);
System.out.println(Thread.currentThread().getId());
}
});
HandlerThread workThread = new HandlerThread("WorkThread");
//workThread.start();
handler = new Handler(workThread.getLooper()){
@Override
public void handleMessage(Message msg) {
switch(msg.what){
case 0:
Toast.makeText(MainActivity.this, "测试", Toast.LENGTH_SHORT).show();
System.out.println(Thread.currentThread().getId());
}
}
};
}
}
把上面的注释去掉,启动线程就好了。