嗨,老铁,欢迎来到我的博客!

如果觉得我的内容还不错的话,可以关注下我在 segmentfault.com 上的直播。我主要从事 PHP 和 Java 方面的开发,《深入 PHP 内核》作者之一。

[视频直播] PHP 进阶之路 - 亿级 pv 网站架构的技术细节与套路 直播中我将毫无保留的分享我这六年的全部工作经验和踩坑的故事,以及会穿插着一些面试中的 考点难点加分点

周梦康 发表于 2014-04-22 2782 次浏览 标签 : 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): 收到了消息对象

嗨,老铁,欢迎来到我的博客!

如果觉得我的内容还不错的话,可以关注下我在 segmentfault.com 上的直播。我主要从事 PHP 和 Java 方面的开发,《深入 PHP 内核》作者之一。

[视频直播] PHP 进阶之路 - 亿级 pv 网站架构的技术细节与套路 直播中我将毫无保留的分享我这六年的全部工作经验和踩坑的故事,以及会穿插着一些面试中的 考点难点加分点

评论列表