c、将消息队列绑定到子线程上,主线程只管通过Handler往子线程的消息队列中投递消息即可。
package com.dxyh.test;
import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.os.HandlerThread;
import android.os.Looper;
import android.os.Message;
import android.util.Log;
public class MainActivity extends Activity {
private final static String TAG = "HandlerTest";
private final static int TASK_BEGIN = 1;
private final static int TASK_1 = 2;
private final static int TASK_2 = 3;
private final static int TASK_END = 4;
private MyHandler mHandler = null;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Log.i(TAG, "[M_TID:" + Thread.currentThread().getId() + "]" +
"This is in main thread.");
HandlerThread myLooperThread = new HandlerThread("my looper thread");
myLooperThread.start();
Looper looper = myLooperThread.getLooper();
mHandler = new MyHandler(looper);
// 启动任务(消息只有标识,立即投递)
mHandler.sendEmptyMessage(TASK_BEGIN);
Log.i(TAG, "[S_ID:" + Thread.currentThread().getId() + "]" +
"Send TASK_START to handler.");
// 开始任务1(在mHandler的消息队列中获取一个Message对象,避免重复构造)
Message msg1 = mHandler.obtainMessage(TASK_1);
msg1.obj = "This is task1";
mHandler.sendMessage(msg1);
Log.i(TAG, "[S_ID:" + Thread.currentThread().getId() + "]" +
"Send TASK_1 to handler.");
// 开启任务2(和上面类似)
Message msg2 = Message.obtain();
msg2.arg1 = 10;
msg2.arg2 = 20;
msg2.what = TASK_2;
mHandler.sendMessage(msg2);
Log.i(TAG, "[S_ID:" + Thread.currentThread().getId() + "]" +
"Send TASK_2 to handler.");
// 结束任务(空消息体,延时2s投递)
mHandler.sendEmptyMessageDelayed(TASK_END, 2000);
Log.i(TAG, "[S_ID:" + Thread.currentThread().getId() + "]" +
"Send TASK_END to handler.");
}
class MyHandler extends Handler {
public MyHandler(Looper looper) {
super(looper);
}
// 现在在每个case之后,你可以做任何耗时的操作了
@Override
public void handleMessage(Message msg) {
switch (msg.what) {
case TASK_BEGIN:
Log.i(TAG, "[H_TID:" +
Thread.currentThread().getId() + "] Get TASK_BEGIN");
break;
case TASK_1:
Log.i(TAG, "[H_TID:" +
Thread.currentThread().getId() + "] Get TASK_1");
break;
case TASK_2:
Log.i(TAG, "[H_TID:" +
Thread.currentThread().getId() + "] Get TASK_2");
break;
case TASK_END:
Log.i(TAG, "[H_TID:" +
Thread.currentThread().getId() + "] Get TASK_END");
finish();
break;
}
super.handleMessage(msg);
}
}
}
运行结果:
分享到:
相关推荐
【Android_Handler详解(一)】 在Android开发中,Handler是一个至关重要的组件,它与线程、消息队列和Looper紧密关联,用于实现不同线程间的通信。本篇将深入探讨Handler的基本概念、使用方法以及其在多线程环境中的...
Android Handler类详解 Android Handler类详解 Android Handler类详解 Android Handler类详解
Android 多线程Handler/Message机制详解 Android 多线程机制是 Android 应用程序中最重要的组件之一,它允许应用程序在后台执行一些操作,而不影响用户的交互体验。在 Android 中,多线程机制是基于 Handler 和 ...
Android Handler详解-中国移动开发者社区 Android Handler详解-中国移动开发者社区
### Android开发工程师面试题之Handler详解 在Android开发过程中,Handler是进行线程间通信的重要机制之一,尤其在实现异步任务更新UI等场景中扮演着关键角色。本篇文章将围绕Handler的工作原理、核心组件及其实现...
【Android Handler 使用详解】 Handler 是 Android 平台中用于处理线程间通信的关键组件,尤其在涉及 UI(用户界面)更新时,它扮演着至关重要的角色。在 Android 应用程序启动时,系统会默认创建一个主线程,也...
Handler是Android中的一个类,它用于在不同的线程之间发送和处理消息。通常,我们使用Handler配合Looper和Message来实现在主线程(UI线程)中执行后台任务的结果。Looper是消息队列的循环器,它不断检查消息队列并...
Handler是Android系统中用于线程间通信的关键组件,它的内部实现原理涉及到Thread、MessageQueue和Looper等核心类。首先,我们需要理解线程在操作系统中的基本概念,线程是程序执行的最小单位,每个线程都有自己的...
7. **多线程与并发**:Android应用需要处理复杂的多线程场景,源码可能包含Handler、AsyncTask、Thread、Service等的使用,以实现后台任务和避免主线程阻塞。 8. **权限管理**:随着Android系统对权限管理的加强,...
Handler和Looper详解 Handler和Looper是Android系统中两个非常重要的组件,它们之间相互关联,共同实现了Android系统中的消息处理机制。在本文中,我们将对Handler和Looper进行详细的解释,并探讨它们在Android系统...
根据提供的标题“Android应用开发详解.pdf”以及描述“Android应用开发详解.pdf”,我们可以推断这份文档主要涵盖了关于Android平台上的应用程序开发的相关知识和技术。虽然提供的部分内容似乎并不包含具体的信息,...
《Android应用开发详解》这本书是Android开发者们的重要参考资料,它深入浅出地讲解了Android应用开发的各个环节。源码作为书中的实践部分,是理论知识的直观体现,可以帮助读者更好地理解和掌握Android编程技术。这...
Handler、Looper和MessageQueue之间的关系关系 在理解Handler的工作原理前,需要了解三个关键组件:Handler、Looper和MessageQueue。它们共同构成了Android的消息传递机制。 1. **MessageQueue**:消息队列,用于...
"Android优化技术详解"这一主题涵盖了多个方面,旨在帮助开发者构建高效、流畅的应用程序。下面,我们将深入探讨这些关键技术点。 首先,我们要理解Android应用性能的基础——内存管理。Android系统采用Dalvik/ART...
### Message,MessageQueue,Looper,Handler详解 #### 一、几个关键概念 ##### 1、MessageQueue:消息队列 MessageQueue是一种数据结构,顾名思义,它充当了一个消息队列的角色,用来存放各种消息对象。每一个线程...
通过深入学习这些知识点,结合《Android应用开发详解与代码(清晰版)》中的实例和实践,新手开发者将能够逐步构建自己的Android应用,开启移动开发之旅。书中可能涵盖了这些概念的详细解释和实际操作步骤,对于渴望...
### Android Handler运行原理详解 #### 一、引言 在Android开发中,线程间通信是非常重要的技术之一,其中Handler机制被广泛应用于实现主线程与子线程之间的数据交互。Handler机制不仅简单易用,而且功能强大,是...
下面是一段大家都比较熟悉的代码: 代码如下:Handler handler = new Handler(); handler.post(myThread); //使用匿名内部类创建一个线程myThreadRunnable mythread = new Runnable() {public void run() {}};一开始...
第三,Android的UI设计通常使用布局文件和自定义视图。源码中会包含XML布局的解析过程,以及自定义View类的绘制和事件处理逻辑。学习这部分源码有助于我们创建更高效、更定制化的用户界面。 第四,Android应用的...
除此之外,Android的异步处理模型如AsyncTask、IntentService、Handler、Thread和ThreadPoolExecutor也是开发者需要掌握的,它们有助于解决多线程问题,提高应用性能。 对于更高级的话题,例如碎片(Fragment)用于...