内容回顾:
(1)UI thread 通常就是main thread,而Android启动程序时会替它建立一个MessageQueue。
(2)当然需要一个Looper对象,来管理该MessageQueue。
(3)我们可以构造Handler对象来push新消息到Message Queue里;或者接收Looper(从Message Queue取出)所送来的消息。
(4)线程A的Handler对象可以传递给别的线程,让别的线程B或C等能送讯息来给线程A(存于A的Message Queue里)。
(5)线程A的Message Queue里的消息,只有线程A所属的对象可以处理。
子线程传递消息给主线程的例子:
1 public class Activity2 extends Activity implements OnClickListener{
2 Button button = null;
3 TextView text = null;
4 MyHandler mHandler = null;
5 Thread thread ;
6 @Override
7 protected void onCreate(Bundle savedInstanceState) {
8 super.onCreate(savedInstanceState);
9 setContentView(R.layout.activity1);
10 button = (Button)findViewById(R.id.btn);
11 button.setOnClickListener(this);
12 text = (TextView)findViewById(R.id.content);
13 }
14 public void onClick(View v) {
15 switch (v.getId()) {
16 case R.id.btn:
17 thread = new MyThread();
18 thread.start();
19 break;
20 }
21 }
22 private class MyHandler extends Handler{
23 public MyHandler(Looper looper){
24 super(looper);
25 }
26 @Override
27 public void handleMessage(Message msg) {//处理消息
28 text.setText(msg.obj.toString());
29 }
30 }
31 private class MyThread extends Thread{
32 @Override
33 public void run() {
34 Looper curLooper = Looper.myLooper();
35 Looper mainLooper = Looper.getMainLooper();
36 String msg ;
37 if(curLooper==null){
38 mHandler = new MyHandler(mainLooper);
39 msg = "curLooper is null";
40 }else{
41 mHandler = new MyHandler(curLooper);
42 msg = "This is curLooper";
43 }
44 mHandler.removeMessages(0);
45 Message m = mHandler.obtainMessage(1, 1, 1, msg);
46 mHandler.sendMessage(m);
47 }
48 }
49 }
说明:
Android会自动替主线程建立Message Queue。在这个子线程里并没有建立Message Queue。所以,myLooper值为null,而mainLooper则指向主线程里的Looper。于是,执行到:
mHandler = new MyHandler (mainLooper);此mHandler属于主线程。
mHandler.sendMessage(m);就将m消息存入到主线程的Message Queue里。
mainLooper看到Message Queue里有讯息,就会作出处理,于是由主线程执行到mHandler的handleMessage()来处理消息。
分享到:
相关推荐
Android事件处理机制
在Android系统中,消息处理机制是应用程序中进行异步通信和线程间通信的核心组件,主要涉及Handler、Message和Looper三个关键元素。本篇将详细阐述这三个组件的作用、原理及其在实际开发中的应用。 首先,我们来...
### Android的消息处理机制详解 #### 一、Android消息处理机制概览 在Android开发中,消息处理机制是非常重要的一个组成部分,它确保了应用程序能够在不同线程之间有效地传递数据和指令,尤其是在更新用户界面(UI)...
### Android的消息处理机制详解 #### 一、引言 Android应用程序是通过消息驱动的,它借鉴了Windows的消息处理机制,并在此基础上实现了一套适合移动设备的处理机制。本篇文章将详细探讨Android的消息处理机制,...
【Android 开发】: Android 消息处理机制之 Handler 与 Message http://blog.csdn.net/ahuier/article/details/17012005
Android的消息机制,值得学习学习。我读了觉得很不错。 android 有一种叫消息队列的说法,这里我们可以这样理解:假如一个隧道就是一个消息队列,那么里面的每一部汽车就是一个一个消息,这里我们先忽略掉超车等种种...
【Android 开发】: Android 消息处理机制之 Handler 中 sendMessage() 源代码剖析 http://blog.csdn.net/ahuier/article/details/17013647
Android应用程序与传统的PC应用程序一样,都是消息驱动的。也就是说,在Android应用程序主线程中,所有函数都是在一个...掌握Android应用程序消息处理机制,有助于我们熟练地使用同步和异步编程,提高程序的运行性能
Android消息机制是指Android系统中的线程间通信机制,该机制负责处理事件的...Android通过这些组件的组合,实现了异步消息处理机制,从而使得在进行耗时操作时,UI线程不会被阻塞,确保了应用界面的流畅性和响应性。
在Android系统中,Handler、Message和Looper构成了一个关键的异步通信机制,即Handler消息处理机制。这个机制允许Android应用程序在不同的线程间传递消息,处理UI更新等操作,是多线程编程中的重要组成部分。下面...
本文介绍了Android中的消息处理机制,给出了Android消息处理中的几个重点类Handler、Message、MessageQueue、Looper、Runnable、Thread的详细介绍,提供了两个消息处理的实例代码,并深入Android源代码分析了使用...
在Android应用程序中,有一类...这个PPT讲Android应用程序输入事件的分发和处理过程,主要涉及到输入管理InputManager、输入事件监控线程InputReader、输入事件分发线程InputDispatcher,以及应用程序主线程消息循环。
Android多线程机制是Android开发中非常重要的一部分,尤其是在处理耗时任务(如网络请求、大数据处理等)时,避免阻塞UI线程,保证应用程序的流畅性和响应性。本文将详细介绍Android多线程的基本原理及其核心组成...
从源码出发,详细的解析了android中的消息机制,分析清楚Looper和MessageQueue以及Handler三者之间的关系。
在Android系统中,线程消息机制是一个核心概念,它确保了应用程序的高效运行和用户体验的流畅性。这个机制主要由三部分组成:Handler、Looper和Message Queue。下面我们将从现实生活中的例子来深入理解这个机制,并...
Android消息机制是Android应用程序开发中的核心机制之一,它涉及线程间通信(IPC)和线程内部的事件驱动,是实现异步消息处理的重要方式。Android消息机制主要基于Handler、Looper和MessageQueue这三个组件协同工作...
在Android系统中,消息传递机制是应用程序中各个组件之间通信的核心途径,对于理解和优化应用程序的性能至关重要。本文将深入探讨Android消息传递机制,基于提供的标题和描述,我们将重点关注这一主题。 首先,...
Android的消息机制是Android系统中处理异步通信和线程间通信的核心组件,它涉及到Handler、Looper和Message等关键概念。这个压缩包包含了源码示例(MessageExample)和三篇PDF文档,帮助深入理解这一机制。 首先,...