handler异步机制学习总结

Handler提供了异步线程这样的机制,可以异步消息处理,就是发送消息和接收消息不是同步的进行。这种机制用来处理相对耗时比较长的功能

1 Handler的基本概念

     在手机开发过程中,有很多功能不适合放在Activity正常的操作里面,比如onCreate这样的方法里面,因为这样的功能费时比较长,比如处理大量数据,下载东西等,如果我们把下载的功能作为Activity的一部分写进去,在下载的过程中就又可能导致Activity没响应,这样对造成用户比较差的感觉,另外如果长时间下载不下来,这个Activity也会报错,那么,可以把这些用时比较长的单独放在一个线程里面去完成,比如Activity是一个线程,而下载文件是另一个线程,这样下载并不会影响到当前使用的Activity,这样能让用户感觉更好,那么Handler就是可以实现类似的功能

 

每一个Handler,都有两个个与之关联的队列,分别可以放消息和线程,消息队列如图


 

消息从队列的一头进入,消息从另一头被依次的取出,被处理,后面不停的往里加,前面不停的取出并处理消息

消息是被用如下函数被加入消息队列的


 

具体如下图:


 

线程队列是用如下函数将线程加入队列的


 

这个postDelayed方法就是把它的第一个参数,即一个线程,送进队列,第二个参数是设置线程队列中消息之间的时间间隔,调用这个方法之后,3000毫秒加进去一次

 

 

 

Handler基本使用方法

1创建一个Handler对象

2创建Button按钮,为之设置监听器,在其监听器的onClick方法中调用Handlerpost方法,将要执行的线程对象添加到队列中,当线程对象被取出后,那么就会调用线程的run方法

3将要进行的操作,比如下载或处理数据等时间较长的操作写在线程对象的run方法中,如果想让这个操作一直执行,就可以在run方法内部,执行postDelayed或者post方法,如下图


 

Handler提供了异步线程这样的机制,比如上面的,在activity里面调用handler.post();方法后,onClick方法就返回了,而去处理需要耗费大量时间的数据的却在另一个线程,即updateThread线程中执行,这两个线程并行运行,互不耽误。即所谓的异步消息处理

 

 

 

Handler与线程

Handler中对线程的处理,并不是真正的另外的启动了一个线程,而是直接在原有的线程中调用run函数,如果想另外启动一个线程,可以这样,新建一个thread,并启动它的start方法,将你出来数据的那个内部类函数当做参数传给新建的thread,如图


 

 

Handler异步机制如下,比如,程序从上往下执行,当执行到 sendMessage 时,就会把消息压入栈尾,然后继续想下执行,至于消息怎么被处理就不是它的事了,异步在,这边程序已经往下进行了,另一边用handlerMessage取出信息做相应处理。


 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值