文档章节

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

f
 flyqilong
发布于 2016/02/27 21:11
字数 410
阅读 123
收藏 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
Android中Handler Thread及Runnable之间的关系

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

yingmd
2012/11/17
0
1
多线程并发——HandlerThread

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

蜗牛崛起
01/23
6
0
Message、Handler、MessageQueue、Looper之间的关系

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

Cory
2013/04/09
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

es6

在实际开发中,我们有时需要知道对象的所有属性,原生js给我们提供了一个很好的方法:Object.keys(),该方法返回一个数组 传入对象,返回属性名 var obj = {'a':'123','b':'345'};console.l...

不负好时光
10分钟前
0
0
叮!您收到一份超值Java基础入门资料!

摘要:Java语言有什么特点?如何最大效率的学习?深浅拷贝到底有何区别?阿里巴巴高级开发工程师为大家带来Java系统解读,带你掌握Java技术要领,突破重点难点,入门面向对象编程,以详细示例...

全部原谅
12分钟前
0
0
web.xml容器加载顺序

容器对于web.xml的加载过程是context-param >> listener >> fileter >> servlet

Aeroever
14分钟前
1
0
Docker容器日志查看与清理

1. 问题 docker容器日志导致主机磁盘空间满了。docker logs -f container_name噼里啪啦一大堆,很占用空间,不用的日志可以清理掉了。 2. 解决方法 2.1 找出Docker容器日志 在linux上,容器日...

muzi1994
15分钟前
0
0
J2Cache 和普通缓存框架有何不同,它解决了什么问题?

不少人看到 J2Cache 第一眼时,会认为这就是一个普普通通的缓存框架,和例如 Ehcache、Caffeine 、Spring Cache 之类的项目没什么区别,无非是造了一个新的轮子而已。事实上完全不是一回事!...

红薯
17分钟前
414
10

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部