周梦康 发表于 2014-04-22 3710 次浏览 标签 : Android

知识要点,总共三个步骤:

准备Looper对象
在WorkThread当中生成Handler对象
在MainThread当中发送消息

从MainThread向WorkerThread发送消息代码

package com.zhoumengkang.handler2;

import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Looper;
import android.os.Message;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;

public class MainActivity extends Activity {
	private Button button;
	private Handler handler;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		button = (Button)findViewById(R.id.button);
		button.setOnClickListener(new OnClickListener(){
			//这里是MainThread	
			@Override
			public void onClick(View v) {
				System.out.println("OnClick:" + Thread.currentThread().getName());
				Message msg = handler.obtainMessage();
				handler.sendMessage(msg);//把消息发送的消息队列当中
			}
			
		});
		WorkerThread wt = new WorkerThread();
		wt.start();
	}
	
	class WorkerThread extends Thread{
		@Override
		public void run(){
			//准备Looper对象
			Looper.prepare();
			//在WorkerThread当中生成一个Handler对象
			handler = new Handler(){
				@Override
				public void handleMessage(Message msg){
					System.out.println("handlerMessage:" + Thread.currentThread().getName());
					System.out.println("收到了消息对象");
				}
			};
			//调用Looper的loop方法之后,Looper对象将不断的从消息队列中取出消息对象
			//如果消息队列中没有对象,则该线程阻塞
			Looper.loop();//取出对象之后交给当前WorkerThread里的handler来处理
		}
	}


	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		// Inflate the menu; this adds items to the action bar if it is present.
		getMenuInflater().inflate(R.menu.main, menu);
		return true;
	}

}

输出结果

	04-22 10:57:29.920: I/System.out(813): OnClick:main
	04-22 10:57:29.930: I/System.out(813): handlerMessage:Thread-57
	04-22 10:57:29.930: I/System.out(813): 收到了消息对象

评论列表