`

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

【应用示例一】
packagecom.android.tutor;
importjava.util.Timer;
importjava.util.TimerTask;
importandroid.app.Activity;
importandroid.os.Bundle;
importandroid.os.Handler;
importandroid.os.Message;
publicclassHandlerDemoextendsActivity{

//title为setTitle方法提供变量,这里为了方便我设置成了int型
privateinttitle=0;

privateHandlermHandler=newHandler(){

publicvoidhandleMessage(Messagemsg){
switch(msg.what){
case1:
updateTitle();
break;
}
};
};
publicvoidonCreate(BundlesavedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.main);

Timertimer=
newTimer();
timer.scheduleAtFixedRate(
newMyTask(),1,5000);
}

privateclassMyTaskextendsTimerTask{
@Override
publicvoidrun(){

Messagemessage=
newMessage();
message.what=
1;
mHandler.sendMessage(message);

}
}


publicvoidupdateTitle(){

setTitle(
"WelcometoMrWei'sblog"+title);
title++;
}
}


源码来自:http://blog.csdn.net/Android_Tutor/archive/2010/05/08/5568806.aspx

上面的代码,直接在主线程中定义Handler成员。在子线程中通过主线程的handler向主线程发送消息。其使用步骤如下:
1、在主线程中定义handler,并为这个handler实现handleMessage方法。
2、在子线程中调用主线程的handler,通过其sendMessage方法发送消息。

【应用示例二】

publicclassActivity1extendsActivityimplementsOnClickListener{

Buttonbutton=null;

TextViewtext=null;

@Override

protectedvoidonCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity1);

button= (Button)findViewById(R.id.btn);

button.setOnClickListener(this);

text= (TextView)findViewById(R.id.content);

}

publicvoidonClick(View v) {

switch(v.getId()) {

caseR.id.btn:

Looper looper = Looper.myLooper();//取得当前线程里的looper

MyHandler mHandler =newMyHandler(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;

}

}

privateclassMyHandlerextendsHandler{

publicMyHandler(Looper looper){

super(looper);

}

@Override

publicvoidhandleMessage(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)对象.

分享到:
评论

相关推荐

    新版Android开发教程及笔记-完整版

    1. **多线程与异步处理**:理解Handler、Looper、IntentService等机制,以及使用AsyncTask或Coroutine处理后台任务。 2. **性能优化**:学习内存管理、绘制优化、启动速度提升等技术,提升应用性能。 3. **插件化...

    Android群英传笔记-----by ---------刘某人程序员

    对于多线程和异步处理,笔记详述了AsyncTask、Handler、Looper、IntentService等机制,帮助开发者解决UI线程阻塞问题,提高应用响应速度。同时,也讨论了Android的进程间通信(IPC)技术,如Binder和AIDL,这对于...

    新版Android开发教程笔记--基础入门一

    9. **异步编程**:Android中的AsyncTask、Handler、Thread和ExecutorService等机制用于在后台执行耗时操作,避免阻塞主线程导致应用无响应。 10. **资源管理**:了解如何在res目录下组织和引用资源,如图片、字符串...

    Android自学笔记-13-ContentObserver内容观察者

    综上所述,ContentObserver是Android中一种有效的数据变更监听机制,它可以帮助开发者实时响应数据变化,实现更高效的用户界面同步。熟练掌握ContentObserver的使用,可以提升应用的响应性和用户体验。通过阅读提供...

    安卓基础笔记-超详细

    第七天,我们深入研究了AsyncTask、Handler-Looper机制以及使用线程池的Executor服务。同时,我们还接触了LiveData和ViewModel,这是Android Jetpack的一部分,用于实现数据绑定和生命周期感知,提高应用的响应性。 ...

    新版Android开发教程;笔记--基础入门二

    Intent是Android系统中用于启动组件和服务的重要机制。教程将解释如何使用显式和隐式Intent,以及如何在Activity之间传递数据,包括基本类型、Parcelable对象和Bundle。 五、服务(Service) 服务是在后台运行的...

    xamarin学习笔记A13(安卓Handler异步消息处理)

    二、Handler机制 1. Handler:是消息处理的核心,它定义了一个消息队列,并处理来自该队列的消息。通常,我们会在主线程中创建一个Handler实例,这样它就能接收到主线程的消息并进行处理。 2. Looper:每个线程都...

    Android代码-局域网简易云端笔记系统源码.zip

    在本项目中,我们讨论的是一个基于Android平台的局域网简易云端笔记系统。这个开源项目为开发者提供了一个实现本地网络共享和存储笔记的示例,适用于那些希望学习如何在Android设备之间通过局域网进行数据同步的...

    Android面试笔记

    综上所述,在Android开发中理解抽象类与接口的区别、掌握字符串比较方式、“==”与`equals()`的区别、多态的概念及其作用、以及如何在服务器数据变化时通知Activity和Handler机制的应用等,都是非常重要的知识点。...

    最新最全的Android开发笔记

    Android的存储机制也是笔记的重点,讲解了SQLite数据库的使用,以及如何使用SharedPreferences、Internal Storage、External Storage和ContentProvider进行数据持久化。 除此之外,笔记还涉及了Android的多线程处理...

    Android开发笔记全集

    6. **多线程**:Android主线程不能执行耗时操作,所以需要使用AsyncTask、IntentService、Thread或Handler-Looper机制进行异步处理,保证用户体验。 7. **权限管理**:随着Android版本的升级,权限管理变得越来越...

    android 很好的学习笔记

    此外,笔记还会涵盖Android的事件处理机制,如点击事件、触摸事件,以及如何处理用户输入。同时,讲解了线程和异步处理,包括AsyncTask和Handler,这对于优化应用性能和用户体验至关重要。 在网络编程方面,笔记将...

    Android代码-饭否客户端源码.zip

    源码中可能使用了Handler、AsyncTask、IntentService或现代的Coroutines、LiveData和Flow等技术来处理异步任务,理解这些工具的使用方法有助于避免ANR(Application Not Responding)问题。 6. **事件总线**:为了...

    Android开发教程笔记完全版 pdf

    由于主线程不允许执行耗时操作,因此Android引入了AsyncTask、IntentService、Handler/Looper机制以及现在推荐的协程(Coroutines)来实现后台任务。 十、权限管理 Android系统采用权限模型来保护用户数据安全。...

    Android代码-AndroidRecordAAC

    可以使用Handler、AsyncTask或其他异步处理机制来启动和停止录音。 9. **用户界面反馈**:为了提供良好的用户体验,应有开始/停止录音的按钮,以及录音状态的指示(如录音图标、计时器等)。 10. **文件播放**:...

    笔记分享---Android 高清加载巨图

    2. Glide、Picasso等库:这些第三方库内置了高效的内存和磁盘缓存机制,简化了图片加载流程,同时也优化了性能。 五、避免OOM的其他策略 1. 使用低分辨率占位符:在大图加载完成前,显示一个较小的预览图,减少...

    android学习笔记之handler消息处理机制1

    但为了执行一些耗时操作,往往会将它们放在子线程中,执行完毕要更新主线程中的UI,所以就有了handler消息处理机制。 handler就相当于一个中转站,子线程通过sendMessage()等方法,将消息发送给handler对象,handler...

    Android开发笔记之:Handler Runnable与Thread的区别详解

    Handler、Message和Looper是Android特有的用于线程间通信的机制。通常,主线程(UI线程)拥有一个Looper,而其他线程没有。当在工作线程中创建一个Handler并关联到主线程的Looper时,可以在工作线程中发送Message,...

    android开发板笔记(0资源分)1

    "android开发板笔记(0资源分)1"这个资源,显然是为了帮助开发者,特别是针对Real6410开发板的用户,快速提升他们的Android技术能力。Real6410开发板是一款常用的嵌入式设备,常用于Android系统的原型验证和应用...

    Android笔记.zip

    这份"Android笔记.zip"的压缩包很可能包含了一份详尽的Android开发者的学习指南。以下是一些关键的Android知识点的深入解析: 1. **Android架构**:Android系统基于Linux内核,分为应用程序层、应用程序框架层、...

Global site tag (gtag.js) - Google Analytics