当前位置: 代码迷 >> Android >> 怎么关闭android中的HandlerThread
  详细解决方案

怎么关闭android中的HandlerThread

热度:84   发布时间:2016-05-01 17:07:40.0
如何关闭android中的HandlerThread

?? ? ? 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来执行

?

?

  相关解决方案