Looper的用法

UI线程如何向子线程发送数据呢?答案:可以通过Handler。

Handler用于处理其它线程发送来的消息。如果Handler于在主线程中,因为主线程默认有了一个消息队列,所以不用显式使用Looper。如果Handler用于自己建立的线程中,需要自己创建队列,来接收其它线程发送来的消息。

下面的例子Hander 对象实现在自定义的线程中。

此处需要注意looper的用法,在自定义的线程中,没有looper管理消息队列来接收消息,所以需要使用Looper.prepare();

public class MainActivity extends Activity {

	private Button button;
	private Handler myhandler;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		button = (Button) findViewById(R.id.button1);
		new Thread(new Runnable1()).start();
		button.setOnClickListener(new OnClickListener() {

			@Override
			public void onClick(View v) {
				// TODO Auto-generated method stub
				Message message = Message.obtain();
				message.arg1 = 1;
				myhandler.sendMessage(message);
			}
		});
	}

	class Runnable1 implements Runnable {

		@Override
		public void run() {
			// TODO Auto-generated method stub
			Looper.prepare();// 循环消息队列
			myhandler = new Handler() {

				@Override
				public void handleMessage(Message msg) {
					// TODO Auto-generated method stub
					super.handleMessage(msg);
					System.out.println(msg.arg1);
				}
			};
			Looper.loop();// 直到消息队列循环结果
		}
	}
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值