android学习--Handler的使用

原创 2012年03月31日 11:00:14

主要学习了HandlerRunnableThreadHandlerThreadLooperMessageBundle7 类的使用

1.Handler :Handler用来发送和处理与线程消息队列相关的Message以及Runnable对象;每个 Handler的实例都与一个单线程以及线程的消息队列相关,创键一个新的Handler对象,就会绑定在创建它的线程的线程或消息队列上;Handler投递消息和runable对象到消息队列并且在它们从消息队列中取出时执行之

post(Runnable)postAtTime(Runnable,long)postDelayed(Runnable,long)sendMessage(Message)

sendEmptyMessage(int) 加入messagerunnable到消息队列

hanldleMessage 从消息队列中取messagerunnable进行处理

obtainMessage从全局的消息池中取出一个新的消息;

总之:Handler就是用来投递(postsendMessagerunnablemessage到主线程消息队列,以及 从队列中取出消息的进行处理(handleMessage);

注:(1obtainMessage得到的消息与new一个消息的区别:new是需要重新申请,效率低; obtainmessage是从消息池里拿来一个msg,并且使用完后会放到pool里,可以重新利用,不用重新分配空间,效率高;

2sendXXX发送后直接返回,postXXX处理后再返回

3handler与创建它的线程相关联,而且也只与创建它的线程相关联,handler运行在创建它的线程中,所以,如果在handler中进行耗时的操作,会阻塞创建它的线程;


2.RunnableThread:

1java中有两种方式实现多线程,一种继承Thread类,一种是实现runnalbe接口

2Threadjava.lang包中定义的,一个类只要继承类Thread类同时复写了本类中的run方法 就可以实现多线程操作类,但是一个类只能继承一个父类,这是此方法的局限;

3)在实际开发中很少使用Thread类,而是通过Runnable接口完成的;在使用Runnable定义的子类中没有start方法,只有Thread类才有,Thread类中有一个构造方法publicThreadRunnabletarger)此构造方法接受Runnable的子类实例,也就是说可以通过Thread类来启动runnable实现多线程;

4)在程序开发中只要是多线程肯定永远以实现Runnable接口为主,因为实现Runnable接口相比继承Thread类有如下优点:避免继承的局限,一个类可以继承多个接口,适合资源的共享

其实Thread类也是Runnable接口的子类

注:Runnable只需要实现一个run接口,而且只有这个接口;


3.Looper:消息泵,不断从MessageQueue中抽取Message执行,因此一个MessageQueue需要一 Looper

HandlerLooperMessageQueue简单的三角关系:LooperMessageQueue一一对应,创建 一个Looper的同时,会创建一个MessageQueue,而Handler与它们的关系是,Handler会引用当前线程里特定的LooperMessageQueue、一个Looper可以对应多个Handler

注:getMainLooper(获取当前应用的主looper)getThread(获取与该looper对应的线程)、 myQueue(返回与当前线程相关的Looper对象)、loop(运行对应线程的messagequeue)、quit(与loop对立)、prepare(用该looper对象初始化当前线程)


4.HandlerThreadandroid的线程分为有消息循环的线程和没有消息循环的线程,有消息循环的 线程一般都会有一个LooperHandlerThread就是Android提供的一个封装好的带有looper的线程类;(可以在Handler定义的子线程中操作Handler,不影响原来的Activity主线程,实现异步


5.使用handler执行新进程

1)生成一个HandlerThread对象;

2)在使用HandlerThreadgetLooper方法前调用该类对象的start方法

3)创建一个继承于Handler类的子类,实现一个参数为Looper对象的构造方法


6.BundleAndroid中的Bundle用于传递自定义的数据,在Bundle中已经封装好了简单数据类型 Stringintfloat等(putIntputString等等方法将这些不同的数据打包到Bundle对象中)


7.Message

obtainMessagesetDatasendToTarget(把该message发送给Handler)、getData


Android中使用多线程的各种姿势

写在前面:内容主要为黄岳钊老师视频分享课的学习笔记。 1)为什么需要多线程处理? 解决耗时任务 文件IO、联网请求、数据库操作、RPC 提高并发能力 同一时间处理更多事情 防止ANR Input...
  • qq_32199531
  • qq_32199531
  • 2016年12月04日 15:49
  • 2743

android 一个小例子说明handler和AlertDialog的简单使用

关于handler的一些知识: 1、handler主要是用于主线程和子线程之间的通信,由于android在主线程之外的线程中不能操作UI,如果想要在子线程中改变UI,就需要使用handler。 2...
  • stormwy
  • stormwy
  • 2013年05月06日 10:26
  • 8253

Android中使用Handler造成内存泄露的分析和解决

Java使用有向图机制,通过GC自动检查内存中的对象(什么时候检查由虚拟机决定),如果GC发现一个或一组对象为不可到达状态,则将该对象从内存中回收。也就是说,一个对象不被任何引用所指向,则该对象会在被...
  • jdsjlzx
  • jdsjlzx
  • 2016年05月12日 18:21
  • 6299

Android学习第十一篇——handler结合ImageView使用Demo

上一篇我们讲到了hangler,最后的时候有点写不下去了,原因就是因为没学到家,因此这次结合实例继续学习。 这次我们要做的就是通过Handler+Thread作为一个计时器来控制图片的透明度...
  • F_Felix
  • F_Felix
  • 2016年08月29日 16:45
  • 151

Android中handler的使用及原理---学习笔记

Android中UI操作是线程不安全的操作,如果有多个线程并发操作UI组件,就会出现线程安全问题,所以Android中制定了一个规则:在Android中只允许主线程(UI线程)修改Activity中的...
  • u013991521
  • u013991521
  • 2015年07月19日 10:33
  • 4293

Android学习笔记-Handler的使用

650) this.width=650;" src="http://s3.51cto.com/wyfs02/M02/53/94/wKiom1RrObPwHDA6AAAyoqkfsXA679.jpg" ...
  • umgsai
  • umgsai
  • 2016年02月04日 11:05
  • 83

Android中handler的使用及原理---学习笔记

一、Handler类的基本介绍以及使用: Android中UI操作是线程不安全的操作,如果有多个线程并发操作UI组件,就会出现线程安全问题,所以Android中制定了一个规则:在Android中...
  • wpwbb510582246
  • wpwbb510582246
  • 2016年09月16日 21:10
  • 123

Android学习之Handler使用小结

Handler的使用大家都很熟悉,今天做一下关于Handler的总结,方便以后使用。为什么用HandlerUI线程是非安全线程,不能进行耗时操作,子线程做耗时操作,不能更新UI,否则会出现程序长时间假...
  • qq_16131393
  • qq_16131393
  • 2016年06月17日 14:10
  • 500

Mars Android视频学习笔记——01_14/15_Handler的使用

本节会用到JAVA的内部类和匿名内部类,这些知识在另一篇转载的文章里详细讲述。http://blog.csdn.net/sam_zhang1984/archive/2011/02/26/6209899...
  • sam_zhang1984
  • sam_zhang1984
  • 2011年02月26日 23:24
  • 2401

学习android之 Handler详细使用

Handler使用例1 这个例子是最简单的介绍handler使用的,是将handler绑定到它所建立的线程中. 本次实验完成的功能是:单击Start按钮,程序会开始启动线程,并且线程程序完成后延时...
  • u010963948
  • u010963948
  • 2015年05月05日 22:24
  • 307
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:android学习--Handler的使用
举报原因:
原因补充:

(最多只允许输入30个字)