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 review handler的使用

  • 2014-08-21 20:10
  • 1.29MB
  • 下载

Android学习之Handler使用小结

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

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

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

android中handler的使用

  • 2011-09-29 12:54
  • 46KB
  • 下载

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

本节会用到JAVA的内部类和匿名内部类,这些知识在另一篇转载的文章里详细讲述。http://blog.csdn.net/sam_zhang1984/archive/2011/02/26/6209899...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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