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;
}
}
};
分享到:
相关推荐
本文将深入探讨Android主线程(也称为UI线程)、子线程以及它们之间的通信方式,结合"android主线程、子线程及线程间通信方式测试app"的描述,我们将详细分析相关知识点。 1. **Android主线程**:主线程是应用程序...
1. **Handler-Message机制**:这是最常用的一种方式,通过创建Handler对象,一个线程(通常是主线程)注册Handler,另一个线程发送Message到MessageQueue,Handler会接收到Message并处理。这种方式适用于需要在特定...
通过上述步骤,你可以实现Android主线程与子线程之间的有效通信。在实际开发中,`Handler`常常与`AsyncTask`、`IntentService`、`Runnable`等结合使用,构建复杂的异步处理逻辑。`MyHandler2`可能是这个示例中的具体...
在Android开发中,多线程通信是一个至关重要的概念,尤其是主线程(UI线程)与子线程之间的交互。本文将深入探讨如何使用Handler机制实现主线程与子线程,以及HandlerThread之间的双向通信。 首先,理解Android的...
在Android应用开发中,Handler、Thread和Looper是三个至关重要的组件,它们共同构成了Android线程间通信的基础架构。本文将详细解析这三个概念及其相互关系,旨在帮助开发者理解它们的工作原理和实际应用场景。 ...
总之,Android主线程和子线程之间的主要区别在于它们的职责和交互方式。主线程专注于维护UI的响应性,而子线程用于执行后台任务。开发者必须遵循Android的线程规则,正确地在主线程和子线程之间切换,以确保应用的...
在Android应用开发中,Handler是用于处理主线程与子线程之间通信的重要工具。它允许开发者在后台线程执行耗时操作(如计算斐波那契数列),然后通过Message对象将结果回调到主线程更新UI。在这个场景中,我们讨论的...
在Android应用开发中,线程间的交互是必不可少的,尤其是子线程与主线程之间的通信。主线程,也称为UI线程,负责处理用户界面的更新和事件响应,而子线程通常用于执行耗时操作,如网络请求、数据处理等,以避免阻塞...
在你的示例"Android 主线程Exception解决方案Demo"中,很可能是通过创建一个子线程来执行网络请求,以此避免主线程异常。`MyNetDemo`可能包含了实现这个功能的代码,而`huoquImg`可能表示获取图片的网络请求。这样的...
本示例“android demo,实现主线程handle,工作子线程threadHandle的处理”专注于如何在主线程和子线程之间有效地进行通信。下面将详细讲解这个知识点。 1. 主线程(UI线程): 在Android中,主线程负责处理用户...
然而,Thread本身并不包含消息循环机制,所以单纯使用Thread无法直接与主线程通信。通常,我们需要结合Handler和Looper来实现线程间通信。 3. **Looper**:Looper是Android中的消息循环器,它负责从消息队列中取出...
在主线程中创建`Handler`实例,然后在子线程中通过该`Handler`发送`Message`,这样就可以在子线程完成任务后更新主线程的UI,避免了直接操作UI导致的跨线程异常。 `Toast`是Android提供的一种轻量级的提示方式,它...
"工具"可能指的是使用Handler和Looper作为工具来解决子线程与主线程通信的问题。 总的来说,这篇博客的核心内容是如何在Android的子线程中利用Handler和Looper机制,正确控制ProgressDialog的显示和消失,遵循了...
创建一个Handler实例,然后在子线程中通过这个Handler发送Message,主线程中的Handler会接收到这个Message并执行相应的回调方法,从而在主线程中更新UI。具体步骤如下: 1. 创建Handler实例: ```java Handler ...
为了在主线程和子线程之间进行有效的通信,Android提供了消息传递机制,主要通过Handler、Looper和Message三个关键组件来实现。 首先,我们来看如何从主线程发送消息到子线程。在给定的代码示例中,创建了一个名为`...
在Android应用开发中,UI线程(也称为主线程)负责处理用户交互和绘制界面,而子线程通常用于执行耗时操作,如网络请求、数据处理等。由于Android系统的安全机制,直接在子线程中修改UI是不允许的,因此我们需要通过...
本文将详细解析如何在`Thread`中使用`Handler`来修改主线程(UI线程)的数据或者更新UI。 首先,我们要了解`Thread`。`Thread`是Java中的一个类,代表程序执行的线程。在Android中,主线程(UI线程)负责处理用户...
`Handler`主要用于解决线程间的通信问题,特别是主线程与工作线程之间的数据交互;而`ImageView`则是显示图片的基础控件,用于在用户界面上展示图像。本文将深入探讨`Handler`和`ImageView`的结合应用。 首先,我们...
在Android开发中,`Handler`通信机制是一种常见且重要的组件,用于实现主线程与子线程之间的消息传递和异步处理。本示例"Handler子线程间通信Demo"将详细解析这一机制及其应用场景。 首先,理解`Handler`、`Looper`...