`

Android主线程、子线程通信(Thread+handler)

 
阅读更多
Android是基于Java的,所以也分主线程,子线程!
主线程:实现业务逻辑、UI绘制更新、各子线程串连,类似于将军;
子线程:完成耗时(联网取数据、SD卡数据加载、后台长时间运行)操作,类似于小兵;

一、子线程向主线程发消息(Thread+handler):
1、主线程中定义Handler:
	Handler mHandler = new Handler(){

		@Override
		public void handleMessage(Message msg) {
			super.handleMessage(msg);
			switch (msg.what) {
			case 0:
				//do something,refresh UI;
				break;
			default:
				break;
			}
		}
		
	};


2、子线程处理完耗时操作之后发消息给主线程,更新UI:
mHandler.sendEmptyMessage(0);

这样在子线程与主线程任务分工的条件下完成了消息交互;

二、主线程向子线程发送消息(Thread+handler):
主线程碰到耗时操作要子线程完成,此时发通知给子线程,操作步骤如下:
1、子线程中定义Handler,Handler定义在哪个线程中,就跟那个线程绑定,在线程中绑定Handler需要调用Looper.prepare();方法,主线程中不调用是因为主线程默认帮你调用了;
public class LoopThread implements Runnable {

	public Handler mHandler = null;

	@Override
	public void run() {
		Looper.prepare();
		mHandler = new Handler() {
			public void handleMessage(Message msg) {
				String result = NetUtil.getJsonContent("北京");
				//完成了获取北京天气的操作;
				Log.i("test", "handler"+result);
			}
		};
		Looper.loop();
	}

}

其中Looper.prepare();和Looper.loop();维护了一个消息队列,等待消息注入并在子线程中执行;
2、主线程中这样调用:
lThread.mHandler.sendEmptyMessage(0);


主线程向子线程发消息,让子线程执行指定的操作,在Android中还有一种方法,即:HandlerThread,看下面的例子:
		HandlerThread handlerThread = new HandlerThread("jerome");
		handlerThread.start();

		/**
		 * 这里要将HandlerThread创建的looper传递给threadHandler,即完成绑定;
		 */
		threadHandler = new Handler(handlerThread.getLooper()) {

			@Override
			public void handleMessage(Message msg) {
				super.handleMessage(msg);
				switch (msg.what) {
				case 0:
//这儿可以做耗时的操作;
					Log.i("jerome", "hello,I am sub thread");
					break;
				default:
					break;
				}
			}
		};
0
0
分享到:
评论

相关推荐

    android主线程、子线程及线程间通信方式测试app

    本文将深入探讨Android主线程(也称为UI线程)、子线程以及它们之间的通信方式,结合"android主线程、子线程及线程间通信方式测试app"的描述,我们将详细分析相关知识点。 1. **Android主线程**:主线程是应用程序...

    Android两个子线程之间的通信

    1. **Handler-Message机制**:这是最常用的一种方式,通过创建Handler对象,一个线程(通常是主线程)注册Handler,另一个线程发送Message到MessageQueue,Handler会接收到Message并处理。这种方式适用于需要在特定...

    android 主线程给子线程发送消息

    通过上述步骤,你可以实现Android主线程与子线程之间的有效通信。在实际开发中,`Handler`常常与`AsyncTask`、`IntentService`、`Runnable`等结合使用,构建复杂的异步处理逻辑。`MyHandler2`可能是这个示例中的具体...

    子线程和主线程通过handler 双向通信

    在Android开发中,多线程通信是一个至关重要的概念,尤其是主线程(UI线程)与子线程之间的交互。本文将深入探讨如何使用Handler机制实现主线程与子线程,以及HandlerThread之间的双向通信。 首先,理解Android的...

    Handler + Thread + Looper

    在Android应用开发中,Handler、Thread和Looper是三个至关重要的组件,它们共同构成了Android线程间通信的基础架构。本文将详细解析这三个概念及其相互关系,旨在帮助开发者理解它们的工作原理和实际应用场景。 ...

    Android主线程和子线程区别详解

    总之,Android主线程和子线程之间的主要区别在于它们的职责和交互方式。主线程专注于维护UI的响应性,而子线程用于执行后台任务。开发者必须遵循Android的线程规则,正确地在主线程和子线程之间切换,以确保应用的...

    android Handler子线程计算斐波那契数列

    在Android应用开发中,Handler是用于处理主线程与子线程之间通信的重要工具。它允许开发者在后台线程执行耗时操作(如计算斐波那契数列),然后通过Message对象将结果回调到主线程更新UI。在这个场景中,我们讨论的...

    子线程和主线程5种交互方式 Demo

    在Android应用开发中,线程间的交互是必不可少的,尤其是子线程与主线程之间的通信。主线程,也称为UI线程,负责处理用户界面的更新和事件响应,而子线程通常用于执行耗时操作,如网络请求、数据处理等,以避免阻塞...

    Android 主线程Exception解决方案Demo

    在你的示例"Android 主线程Exception解决方案Demo"中,很可能是通过创建一个子线程来执行网络请求,以此避免主线程异常。`MyNetDemo`可能包含了实现这个功能的代码,而`huoquImg`可能表示获取图片的网络请求。这样的...

    android demo,实现主线程handle,工作子线程threadHandle的处理

    本示例“android demo,实现主线程handle,工作子线程threadHandle的处理”专注于如何在主线程和子线程之间有效地进行通信。下面将详细讲解这个知识点。 1. 主线程(UI线程): 在Android中,主线程负责处理用户...

    Android线程模式(handler,thread,looper)

    然而,Thread本身并不包含消息循环机制,所以单纯使用Thread无法直接与主线程通信。通常,我们需要结合Handler和Looper来实现线程间通信。 3. **Looper**:Looper是Android中的消息循环器,它负责从消息队列中取出...

    android service thread toast handler

    在主线程中创建`Handler`实例,然后在子线程中通过该`Handler`发送`Message`,这样就可以在子线程完成任务后更新主线程的UI,避免了直接操作UI导致的跨线程异常。 `Toast`是Android提供的一种轻量级的提示方式,它...

    子线程控制ProgressDialog的可见性

    "工具"可能指的是使用Handler和Looper作为工具来解决子线程与主线程通信的问题。 总的来说,这篇博客的核心内容是如何在Android的子线程中利用Handler和Looper机制,正确控制ProgressDialog的显示和消失,遵循了...

    Android 线程+View的使用

    创建一个Handler实例,然后在子线程中通过这个Handler发送Message,主线程中的Handler会接收到这个Message并执行相应的回调方法,从而在主线程中更新UI。具体步骤如下: 1. 创建Handler实例: ```java Handler ...

    android主线程和子线程之间消息传递详解

    为了在主线程和子线程之间进行有效的通信,Android提供了消息传递机制,主要通过Handler、Looper和Message三个关键组件来实现。 首先,我们来看如何从主线程发送消息到子线程。在给定的代码示例中,创建了一个名为`...

    安卓UI线程和子线程通讯更新UI实例

    在Android应用开发中,UI线程(也称为主线程)负责处理用户交互和绘制界面,而子线程通常用于执行耗时操作,如网络请求、数据处理等。由于Android系统的安全机制,直接在子线程中修改UI是不允许的,因此我们需要通过...

    测试Thread中使用Handler修改

    本文将详细解析如何在`Thread`中使用`Handler`来修改主线程(UI线程)的数据或者更新UI。 首先,我们要了解`Thread`。`Thread`是Java中的一个类,代表程序执行的线程。在Android中,主线程(UI线程)负责处理用户...

    Handler+ImageView

    `Handler`主要用于解决线程间的通信问题,特别是主线程与工作线程之间的数据交互;而`ImageView`则是显示图片的基础控件,用于在用户界面上展示图像。本文将深入探讨`Handler`和`ImageView`的结合应用。 首先,我们...

    Handler通信

    在Android开发中,`Handler`通信机制是一种常见且重要的组件,用于实现主线程与子线程之间的消息传递和异步处理。本示例"Handler子线程间通信Demo"将详细解析这一机制及其应用场景。 首先,理解`Handler`、`Looper`...

Global site tag (gtag.js) - Google Analytics