链接:
Android的消息机制,用Android线程间通信的Message机制,Android中Handler的使用方法——在子线程中更新界面,handler机制
http://blog.csdn.net/lcfeng1982/article/details/6935383
Android中Message机制的灵活应用
http://qaohao.iteye.com/blog/509145
**********************************************************
Android笔记--handler机制
一、重要参考资料
【参考资料】
目前来看,下面的几个网址中的内容质量比较不错,基本不需要再读别的网址了。
1、android消息机制一
http://xtfncel.javaeye.com/blog/663517
2、Android消息机制二
http://xtfncel.javaeye.com/blog/663518
3、Android线程间通信的message机制
http://www.javafun.cn/viewthread.php?tid=1517
4、
5、Android中Handler的使用方法-在子线程中更新界面
http://blog.csdn.net/yangpeng98/archive/2010/05/26/5625955.aspx
二、知识要点
一、知识点
1、handler应该由处理消息的线程创建。
2、handler与创建它的线程相关联,而且也只与创建它的线程相关联。handler运行在创建它的线程中,所以,如果在handler中进行耗时的操作,会阻塞创建它的线程。
【来源】以上来自:
二、一些知识点
1、Android的线程分为有消息循环的线程和没有消息循环的线程,有消息循环的线程一般都会有一个Looper。主线程(UI线程)就是一个消息循环的线程。
2、
Looper.myLooper(); //获得当前的Looper
Looper.getMainLooper () //获得UI线程的Lopper
3、Handle的初始化函数(构造函数),如果没有参数,那么他就默认使用的是当前的Looper,如果有Looper参数,就是用对应的线程的Looper。
4、如果一个线程中调用Looper.prepare(),那么系统就会自动的为该线程建立一个消息队列,然后调用 Looper.loop();之后就进入了消息循环,这个之后就可以发消息、取消息、和处理消息。
【来源】以上来自:http://www.javafun.cn/viewthread.php?tid=1517
三、应用实例
3.1 handler传递message
【应用示例一】
package com.android.tutor;
import java.util.Timer;
import java.util.TimerTask;
import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
public class HandlerDemo extends Activity {
//title为setTitle方法提供变量,这里为了方便我设置成了int型
private int title = 0;
private Handler mHandler = new Handler(){
public void handleMessage(Message msg) {
switch (msg.what) {
case 1:
updateTitle();
break;
}
};
};
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Timer timer = new Timer();
timer.scheduleAtFixedRate(new MyTask(), 1, 5000);
}
private class MyTask extends TimerTask{
@Override
public void run() {
Message message = new Message();
message.what = 1;
mHandler.sendMessage(message);
}
}
public void updateTitle(){
setTitle("Welcome to Mr Wei's blog " + title);
title ++;
}
}
源码来自:http://blog.csdn.net/Android_Tutor/archive/2010/05/08/5568806.aspx
上面的代码,直接在主线程中定义Handler成员。在子线程中通过主线程的handler向主线程发送消息。其使用步骤如下:
1、在主线程中定义handler,并为这个handler实现handleMessage方法。
2、在子线程中调用主线程的handler,通过其sendMessage方法发送消息。
【应用示例二】
public class Activity1 extends Activity implements OnClickListener{
Button button = null;
TextView text = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity1);
button = (Button)findViewById(R.id.btn);
button.setOnClickListener(this);
text = (TextView)findViewById(R.id.content);
}
public void onClick(View v) {
switch (v.getId()) {
case R.id.btn:
Looper looper = Looper.myLooper();//取得当前线程里的looper
MyHandler mHandler = new MyHandler(looper);//构造一个handler使之可与looper通信
//buton等组件可以由mHandler将消息传给looper后,再放入messageQueue中,同时mHandler也可以接受来自looper消息
mHandler.removeMessages(0);
String msgStr = "主线程不同组件通信:消息来自button";
Message m = mHandler.obtainMessage(1, 1, 1, msgStr);//构造要传递的消息
mHandler.sendMessage(m);//发送消息:系统会自动调用handleMessage方法来处理消息
break;
}
}
private class MyHandler extends Handler{
public MyHandler(Looper looper){
super(looper);
}
@Override
public void handleMessage(Message msg) {//处理消息
text.setText(msg.obj.toString());
}
}
}
这是另一种使用handler的方法是可以派生一个Handler的子类,在子类中实现handleMessage方法。
1、定义Handler的派生类,并在子类中实现handleMessage方法。
2、在主线程的类中,定义该子类的对象。
3、在子线程中,调用主线程中的对象。
3.2 handler传递runnable对象
还有另外一种用Handler来进行线程间通信的方式,那就是用Handler来传递一个runnable对象,而不是一个message。
【应用实例三】
使用步骤
1、在主线程中定义Handler对象
2、构造一个runnable对象,为该对象实现runnable方法,在该方法中进行一些你想做的耗时操作。
3、在子线程中使用Handler对象post(runnable)对象.
发表评论
-
数据结构利器之私房STL
2012-12-11 10:29 0http://www.cnblogs.com/daoluanx ... -
Android xml资源文件中@、@android:type、@*、?、@+含义和区别
2011-12-28 08:48 1050一.@代表引用资源 1.引用自定义资源。格式:@[packa ... -
常用activity跳转
2011-11-01 10:50 1619------------------------------- ... -
Activity的android:launchMode
2011-10-14 09:41 1093<activity android:launchMode ... -
android wifi
2011-10-10 10:26 1075wifi网卡的状态由一系列的整型常量来表示的: 1)、int ... -
android 蓝牙
2011-09-26 11:32 1177对于一般的软件开发人员来说,蓝牙是很少用到的,尤其是Andro ... -
HttpClient的使用
2011-09-13 11:11 1093HTTP 协议可能是现在 Internet 上使用得最多、最重 ... -
XML解析之-pull解析
2011-09-09 10:07 10746Pull是Android内置的xml解析器。Pull解析器的运 ... -
XML解析之-SAX解析
2011-09-08 18:04 1457在android开发中,我们经常使用SAX解析来解析xml数据 ... -
XML解析之-XStream解析
2011-09-08 17:07 11402本例使用XStream生成一个xml文件,再发序列化xml ... -
json数据解析一
2011-09-08 11:05 1626本例用JsonReader类来解析 ... -
json数据解析二
2011-09-08 10:47 1260这一篇我们将采用Gson类来解析json数据。把json解析出 ... -
Google Map(二)
2011-09-06 19:26 1721在Google Map(一) 中,我们学习了怎么样在手机中显示 ... -
Google Map(一)
2011-09-06 18:24 1075今天学习了google map的简单开发,此篇博文主要内容是: ...
相关推荐
总的来说,这个关于Handler的实例是Android开发中的一个基础但关键的学习点,通过它,开发者可以掌握如何有效地管理线程,保证UI的流畅更新,以及如何进行线程间的通信。对于Android应用的性能优化和用户体验提升...
在Android开发中,`Handler`、`Looper`和`Message`是实现线程间通信的重要组件,特别是当涉及到主线程(UI线程)与工作线程之间的数据交互时。本篇将深入讲解如何在Android中使用`Handler`,并提供实际的代码示例。 ...
在Android开发中,Handler是一种非常重要的机制,它用于在主线程中处理来自其他线程的消息,从而实现线程间通信,尤其是对UI...通过实践和学习更多关于Handler的知识,开发者可以更好地掌握Android应用的异步编程技巧。
`Handler`是Android提供的一个关键工具,用于解决多线程环境下的消息传递和处理问题。本篇文章将深入探讨`Handler`实例及其在Android线程通信中的应用。 首先,线程间通信在Android中通常涉及到主线程(UI线程)与...
在Android开发中,图片...这个简单的HandlerDemo可以作为初学者理解多线程与UI交互的一个起点,随着技术的深入,你还可以学习更多关于Handler、Looper、Message队列的高级用法,以及如何在复杂的项目中更好地管理它们。
以下是关于Handler使用相关的三个实例所体现的知识点的详细解释: 1. **Handler的创建和工作原理** Handler的创建通常需要配合Looper。Looper是每个线程中的消息循环器,它负责接收并分发Message。在主线程中,...
在面试中,面试官可能会询问关于Handler的内存泄漏问题。由于Handler实例通常持有对Activity的引用,如果不正确地管理,可能导致Activity无法被垃圾回收,从而引发内存泄漏。为避免这种情况,我们可以在Activity的`...
以上就是关于HandlerMessage的基础知识及其在Android应用中的使用。通过深入研究"Android应用源码之HandlerMessage3.zip",开发者可以更直观地学习到这些概念的实际运用,提升自己的Android编程技能。
下面是关于Handler机制的详细说明: 1. **Looper的准备**:`Looper.prepare()`方法会在当前线程中创建并初始化一个Looper对象。这个方法会确保每个线程只调用一次,因此在同一个线程中,只有一个MessageQueue被创建...
在Android开发中,`Handler`是一个至关...以上就是关于`Handler`的基本使用方法、工作原理、避免内存泄露以及实现定时任务的详细解析。在实际开发中,熟练掌握`Handler`的运用,能有效提高代码的可读性和程序的响应性。
在这种情况下,Handler机制可以作为一个有效的工具来实现线程间的通信。本文将深入探讨如何在Fragment和Activity之间使用Handler进行交互。 首先,了解Handler的基本概念。Handler是Android中的一个消息处理类,它...
在Android开发中,`Handler`是一个至关重要的组件,它用于在主线程中处理来自其他线程的消息,确保UI更新和事件处理的同步性。本文将详细介绍`Handler`的几种常见写法,以及如何使用`Handler.Callback`进行消息处理...
"JobHandler调度器"是一种广泛应用于分布式任务调度的框架,主要设计用于处理大规模并发和定时任务的场景。在这个系统中,JobHandler是核心组件,它负责执行具体的业务逻辑。下面我们将详细探讨JobHandler调度器的...
在Android开发中,`Handler`是一个非常重要的组件,它用于处理UI线程之外的异步消息,实现线程间通信。`Handler`、`Looper`和`Message`三者共同构成了Android的消息处理机制,帮助开发者在不同的线程之间传递数据和...
在Android开发中,Handler是一种非常重要的机制,它用于在主线程和子线程之间进行通信,处理异步消息。理解并熟练使用Handler是每个Android开发者必备的技能之一。本篇文章将详细讲解Handler的基本概念、工作原理...
一直以来,Handler于我而言都是难以形容的大麻烦。姑且不论线程通信一二三,就算是如何利用Handler来实现各项业务间消息传输,我也只能粗浅的说说如何跟踪消息而已。跟它较劲了很久,零零碎碎总结了不少,总算是明白...
在Android开发中,`Handler`是一个至关重要的组件,主要用于处理线程间的通信,尤其是主线程(UI线程)与工作线程之间的交互。本`Handler`推荐用法的示例,旨在帮助开发者理解和掌握如何有效地使用`Handler`来管理...
Foxit PDF Preview Handler 是一款专为Outlook 2007设计的插件,它使得用户可以在不离开邮件客户端的情况下预览PDF附件。这款工具极大地提升了处理PDF文档的效率,尤其是在处理大量PDF邮件附件时,避免了频繁打开...
在Android应用开发中,Handler是一种重要的线程通信机制,它与Looper、Message紧密配合,用于在不同的线程间传递消息,解决多线程同步问题。本篇将详细讲解Handler的使用,包括如何创建Handler对象、如何发送和处理...