文档章节

Handler在主线程创建和在子线程创建的示例(18)

f
 flyqilong
发布于 2016/02/27 21:11
字数 410
阅读 141
收藏 0
//在主线程创建Handler,实现UI的更新,以下是一个例子
public class MainActivity extends Activity {
	private TextView text_show;

	// 在主线程中创建消息Handler
	// 主线程创建方式
	Handler handler = new Handler() {
		// 要重写里面的方法
		public void handleMessage(android.os.Message msg) {
			// 跟新UI,设置textview
			if (msg.what == 1) {
				text_show.setText((String) msg.obj);
			}
		};

	};// 注意这里要分号

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		text_show = (TextView) this.findViewById(R.id.text_show);
	}

	public void sendMessage(View view) {
		// 耗时工作在子线程,然后向主线程传递数据
		new Thread(new Runnable() {

			@Override
			public void run() {
				// Message对象可以通过new出来,但不建议,通常使用 Message.obtain() 或
				// Handler.obtainMessage() 方法来从消息池中获得空消息对象,以节省资源;
				Message message = Message.obtain();
				message.what = 1;
				message.obj = "这是子线程,请接收";
				// 封装完数据发送给主线程
				handler.sendMessage(message);

			}
		}).start();
	}
}

//在子线程运用的例子
public class SecondActivity extends Activity {
	private TextView text_show;

	// 在子线程中创建消息Handler
	// 子线程创建方式
	private Handler handler;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		text_show = (TextView) this.findViewById(R.id.text_show);
		new Mythread().start();
	}

	public void sendMessage(View view) {

		Message message = Message.obtain();
		message.what = 1;
		message.obj = "这是主线程在发送,请接收";
		// 封装完数据发送给子线程
		handler.sendMessage(message);

	}

	// Handler在子线程张处理消息
	class Mythread extends Thread {
		@Override
		public void run() {
			// 1.创建looper
			Looper.prepare();
			handler = new Handler() {
				// 要重写里面的方法
				@Override
				public void handleMessage(Message msg) {
					switch (msg.what) {
					case 1:
						Log.i("MainActivity", (String) msg.obj);
						break;

					}
				}

			};// 注意这里要分号
				// 3.循环读取MessageQueue
			Looper.loop();

		}

	}
}


© 著作权归作者所有

f
粉丝 3
博文 93
码字总数 53900
作品 0
Android工程师
私信 提问
浅析Android中的消息机制

在分析Android消息机制之前,我们先来看一段代码: 这段代码似乎看上去很正常,但是当你运行时就会发现,它会报一个致命性的异常: 到底是怎么回事呢?原因在于,Android系统中的视图组件并不...

hanzhankang
2014/01/25
0
0
Handler的基本使用

一、Handler的定义: 主要接受子线程发送的数据, 并用此数据配合主线程更新UI。 解释:当应用程序启动时,Android首先会开启一个主线程 (也就是UI线程) , 主线程为管理界面中的UI控件, 进...

初来小修
2016/02/04
171
0
多线程并发——HandlerThread

HandlerThread本质上就是一个普通Thread,只是这个线程内部有一个looper,而这个looper有一个消息队列MessageQue,它通过不断的用looper去检查MessageQue然后取出消息然后处理。 基本用法 创...

蜗牛崛起
2018/01/23
6
0
Android中Handler Thread及Runnable之间的关系

Android中Handler Thread及Runnable之间的关系 在多线程编程这块,我们经常要使用Handler,Thread和Runnable这三个类,那么他们之间的关系你是否弄清楚了呢? 首先说明Android的CPU分配的最小...

yingmd
2012/11/17
0
1
Message、Handler、MessageQueue、Looper之间的关系

Looper是一个消息分发器,在主线程创建的时候就会创建一个Looper对象 messageQueue :消息队列,是由message组成的一个 队列 handler:从messageQueue中获取到message,然后执行动作,可以再...

Cory
2013/04/09
0
0

没有更多内容

加载失败,请刷新页面

加载更多

编写高质量代码:改善Java程序的151个建议(第5章:数组和集合___建议70~74)

本节内容有些吹毛求疵、晦涩难懂! 建议70:子列表只是原列表的一个视图 List接口提供了subList方法,其作用是返回一个列表的子列表,这与String类subSting有点类似。 注意:subList产生的列...

青衣霓裳
17分钟前
1
0
一文入门Drools规则引擎

Drools是一款基于Java的优秀的规则引擎,将复杂多变的业务规则从硬编码中解放出来,以规则脚本的形式存放在文件中,使得修改规则不需要改动代码重启服务就能生效。 Drools有一定的学习成本,...

阿提说说
21分钟前
0
0
企业数据化转型,大数据分析,业务中台,不可缺少的大数据可视化工具

全球经济发展进入了数字化转型时期。每个企业都希望赶上这趟转型的列车。为什么大家都如此看重数字化转型?因为这是一个生存问题,企业必须这样做。 数字化转型涉及企业管理的改变,不同的思...

NBI大数据可视化
30分钟前
1
0
时尚电商新赛道:揭秘 FashionAI 技术

阿里妹导读:雷音是阿里巴巴研究员、淘系技术部 FashionAI 负责人,在淘系技术嘉年华硅谷站,他分享了《时尚电商新赛道— FashionAI 中的技术》 ,旨在揭秘:从面向机器学习的知识重建切入,...

阿里云云栖社区
35分钟前
1
0
Java基础-Queue

Queue实现 1、没有实现阻塞接口的 LinkedList:实现了java.util.Queue接口和java.util.AbstractQueue接口   内置的不阻塞队列:PriorityQueue和ConcurrentLinkedQueue   PriorityQueue和...

MyOldTime
今天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部