Handler(下)——Mars Andoird开发视频第二季第八集(重)

主线程向工做线程发送消息

1. 在工做线程中准备Looper对象

2. 在工做线程中实例化Handler对象

3. 在主线程中发送消息

例子:并发

实现点击按钮,发送消息对象;在工做线程中接收处理消息对象。oop

  • WokerThread 类
准备Looper对象,并生成Handler对象

· 能够在工做线程里,直接写Handler匿名内部类来实现handleMessage方法;线程

· 也能够在外面写个内部类实现Handler,而后在这里实例化。code

这里使用后者对象

class WorkerThread extends Thread {
		public void run() {
			Looper.prepare();
			handler = new MyHandler();
			Looper.loop();
//调用looper的loop方法以后,Looper将不断从消息队列中取出消息对象
//而后调用handler的handleMessage方法处理消息对象
//若是没有消息对象,则线程阻塞
		}
	}
  • 在onCreate方法中启动这个工做线程
new WorkerThread().start();
  • 继承Hanlder的内部类:
class MyHandler extends Handler {
		public void handleMessage(Message msg) {
			super.handleMessage(msg);
			System.out.println("handleMessage方法,当前:" + Thread.currentThread().getName() + " 接收到消息");
			System.out.println("收到的数据为:" + msg.obj);
		}
	}
  • 建立消息并发送出去

按钮监听:继承

class ButtonOnClickListener implements OnClickListener {
		public void onClick(View v) {
			System.out.println("当前为:" + Thread.currentThread().getName() + "Thread---发送消息");
			Message msg = handler.obtainMessage();
			String s = "Hello";
			System.out.println("发送的数据为:" + s);
			msg.obj = s;
			handler.sendMessage(msg);
		}
	}

输入图片说明

相关文章
相关标签/搜索