handler消息处理机制的用法-创新互联

class LooperThread extends Thread {

成都创新互联公司长期为1000+客户提供的网站建设服务,团队从业经验10年,关注不同地域、不同群体,并针对不同对象提供差异化的产品和服务;打造开放共赢平台,与合作伙伴共同营造健康的互联网生态环境。为金山企业提供专业的网站建设、网站设计,金山网站改版等技术服务。拥有10余年丰富建站经验和众多成功案例,为您定制开发。

  public Handler mHandler;

  public void run() {

new Handler() {

      public void handleMessage(Message msg) {

        // process incoming messages here

Post:Post允许把一个Runnable对象入队到消息队列中。它的方法有:post(Runnable)、    postAtTime(Runnable,long)、postDelayed(Runnable,long)。

sendMessage:sendMessage允许把一个包含消息数据的Message对象压入到消息队列中。它的方法有:sendEmptyMessage(int)、sendMessage(Message)、sendMessageAtTime(Message,long)、sendMessageDelayed(Message,long)。

Message:Message是一个final类,所以不可被继承。使用Message.obtain()这个静态的方法或者Handler.obtainMessage()获取。Message.obtain()方法具有多个重载方法,大致可以分为为两类,一类是无需传递Handler对象,对于这类的方法,当填充好消息后,需要调用Handler.sendMessage()方法来发送消息到消息队列中。第二类需要传递一个Handler对象,这类方法可以直接使用Message.sendToTarget()方法发送消息到消息队列中,这是因为在Message对象中有一个私有的Handler类型的属性Target,当时obtain方法传递进一个Handler对象的时候,会给Target属性赋值,当调用sendToTarget()方法的时候,实际在它内部还是调用的Target.sendMessage()方法。

总结:一个Looper对应一个MessageQueue,一个线程对应一个Looper,一个线程可以有多个looper。

Handler handler = new Handler(){...}创建Handler。这样创建的handler是在主线程即UI线程下的Handler,即这个Handler是与UI线程下的默认Looper绑定的。HandlerThread实际上就一个Thread,只不过它比普通的Thread多了一个Looper。创建HandlerThread时要把它启动了,即调用start()方法。然后创建Handler时将HandlerThread中的looper对象传入。


HandlerThread thread = new HandlerThread("MyHandlerThread");
thread.start();
mHandler = new Handler(thread.getLooper());
mHandler.post(new Runnable(){...});
那么这个Handler对象就是与HandlerThread这个线程绑定了(这时就不再是与UI线程绑定了,这样它处理耗时操作将不会阻塞UI)。

上文描述的就是handler消息处理机制的用法,具体使用情况还需要大家自己动手实验使用过才能领会。如果想了解更多相关内容,欢迎关注创新互联行业资讯频道!

另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。


当前标题:handler消息处理机制的用法-创新互联
文章位置:http://myzitong.com/article/cecpip.html