?? ? ? android 中的HandlerThread包含了android中的消息处理机制必须的looper,当你启动这个线程的时候,就会闯进looper,并开启消息处理的循环。
?? ? ?跟其它线程一样,HandlerThread是可不可以直接stop掉的,不过经过本人测试,你可以调用:getLooper().quit();来退出这个线程,其实原理很简单,就是改变在消息循环里面标志位,退出整个while循环,使线程执行完毕。
?
?? ? 部分 测试代码如下:
?
?? ?public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); setContentView(R.layout.main); tv_name = (TextView) findViewById(R.id.tv_name); btn_name = (Button) findViewById(R.id.btn_name); Log.i(TAG, "==================main thread:" + Thread.currentThread().getName()); final HandlerThread thread = new HandlerThread("handlerThread"); thread.start(); final MyHandler handler = new MyHandler(thread.getLooper()); btn_name.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { handler.sendEmptyMessage(1); try { Thread.sleep(3000); } catch (InterruptedException e) { e.printStackTrace(); } thread.getLooper().quit(); } }); } class MyHandler extends Handler { public MyHandler(Looper looper) { super(looper); } @Override public void handleMessage(Message msg) { Log.i(TAG, "==================" + Thread.currentThread().getName()); //tv_name.setText("hello, this is the first message from handler"); super.handleMessage(msg); } }??? 不过要注意:要想更新界面内容,还是需要使用界面的Looper,不然的话还是会抛错误,还是那句话,所有跟改变界关的操作,都得通过界面的Looper来执行
?
?