说到代码的可读性,有时候,我们更加看重代码之间的层次或者说模块化,耦合度等特点。
不同的业务逻辑,不同的功能,应该实现在不同的模块中,而模块与模块之间就可以通过一个消息来通信,而这种消息通讯方式,我们就可以利用Handler和HandlerThread来实现。
比如,最近做的一个浏览器的小Demo,其类图如下:
...
在不同的模块实现中, 我们可以调用registerHandler方法,将其对象的Handler注册到MessageDispatcher中,然后通过sendMessage方法,指定对应的目标,...
分类:
移动开发 时间:
2014-10-28 20:09:23
阅读次数:
386
在这篇文章开始前,我们先总结一下前两篇文章中关于Handler, Looper和MessageQueue等的一些关键点:
0)在线程中创建Handler之前,必须先调用Looper.prepare(), 创建一个线程局部变量Looper,然后调用Looper.loop() 进入轮循。
1)当Handler创建之后,就可以调用Handler的sendMessageAtTime方法发送消息,而实际上是调用MessageQueue的enqueueMessage方法,将对应的消息放入消息队列。
2)每一个线程都只有...
分类:
移动开发 时间:
2014-10-28 12:11:13
阅读次数:
266
1、在多线程编程这块,我们经常要使用Handler,Thread和Runnable这三个类,那么他们之间的关系你是否弄清楚了呢?答:Android的CPU分配的最小单元是线程,Handler一般是在某个线程里创建的,因而Handler和Thread就是相互绑定的,一一对应。而Runnable是一个接...
分类:
移动开发 时间:
2014-10-28 11:44:59
阅读次数:
359
基本上只要继承自View的控件,都具有消息队列或者handler的一些处理方法,下面是一些handler方法以及被View封装了的方法,其底层用的基本都是handler的api。 我么开一下postDelay的定义 android.view.View ?pub...
分类:
移动开发 时间:
2014-10-27 23:11:21
阅读次数:
502
recvfrom函数调用设置为非阻塞,设置的打印是异常的现象,导致子线程和主线程都挂掉了。...
分类:
其他好文 时间:
2014-10-27 21:24:23
阅读次数:
218
trigger()方法触发事件后,会执行浏览器默认操作。$("input").trigger("focus")以上的代码不仅会执行input绑定的focus事件,也会使input元素本身得到焦点(这是浏览器的默认行为)如果想阻止浏览器的默认行为:$("input").triggerHandler("...
分类:
Web程序 时间:
2014-10-27 19:03:55
阅读次数:
161
在之前一篇介绍AsyncTask的文章中,我们在最后讲到,AsyncTask是利用Handler的消息异步处理机制,将操作结果,利用Message传回主线程,从而进行UI线程的更新的。
而在我们日常的开发工作中,Handler也是我们经常使用的类之一,那么Handler的主要作用是什么?
Handler 的主要作用就是对消息(消息可以是我们想做的一些UI更新,也可以是其他的一些不可见的操作,如操作数据库等)的异步处理机制,而相信大家都了解异步的概念。
简单地说一下:
1)从程序的角度来看,就是当执行某行代码...
分类:
移动开发 时间:
2014-10-27 17:50:51
阅读次数:
248
这两个的差别就在于是否有参数Looper,而Looper是一个线程相关的对象。
何谓线程相关的变量?就是线程间不能共享的对象,只在本线程内有作用的对象。
那么Looper对象的作用是什么?
从我个人的理解,Looper类就是对MessageQueue的封装,它主要做的是两件事:
1)构造Looper对象,初始化MessageQueue,我们可以从其构造函数看到:
可以看到,Loop对象被创建之后,会被放到ThreadLocal变量中,而ThreadLocal正是线程局部变量,这说明了关于Looper的一个特...
分类:
移动开发 时间:
2014-10-27 17:41:19
阅读次数:
173
package mainimport ( "net/http" "runtime/pprof")var quit chan struct{} = make(chan struct{})func f() { <-quit}func handler(w http.ResponseWriter, r...
分类:
其他好文 时间:
2014-10-27 17:15:56
阅读次数:
158
按照下面的理解就是handler与ui线程有一定的关联可以因为更新界面只能在主线程中所有更新界面的地方可以在接受消息的handleMessage那里还有更新界面可以在handler.port(new Runnable))在自定义的线程中然后执行post方法通知主线程去更新这个界面
下面是参考:
Android 线程是单线程的。 所以更新UI要用到Handler:
private ...
分类:
移动开发 时间:
2014-10-27 14:27:30
阅读次数:
283