zoukankan      html  css  js  c++  java
  • android Handler介绍

    Handler使用介绍:

    Handler根据接收的消息,处理UI更新。Thread线程发出消息,通知Handler更新UI。

    Handler mHandler = new Handler() { 
      public void handleMessage(Message msg) {  
        switch (msg.what) {  
        case 0x1:  
          view.invalidate(); 
          break;  
        }  
        super.handleMessage(msg);  
      }  
    };

    class UpdateViewThread implements Runnable {  
      public void run() { 
        while (!Thread.currentThread().isInterrupted()) {    
          Message message = new Message();  
          message.what = 0x1;   
          mHandler.sendMessage(message);  
          try {  
            Thread.sleep(200);   
          } catch (InterruptedException e) {  
            Thread.currentThread().interrupt();  
          }  
        }  
      }  

    (1)对于线程中的刷新一个View为基类的界面,可以使用postInvalidate()方法在线程中来处理,其中还提供了一些重写方法比如postInvalidate(int left,int top,int right,int bottom) 来刷新一个矩形区域,以及延时执行,比如postInvalidateDelayed(long delayMilliseconds)或postInvalidateDelayed(long delayMilliseconds,int left,int top,int right,int bottom) 方法,其中第一个参数为毫秒

    (2)可以在一个线程的run方法中调用Handler对象的postMessage或sendMessage方法来实现,Android程序内部维护着一个消息队列,会进行轮询处理。

    (3)在Android中每一个Thread都跟着一个Looper,Looper可以帮助Thread维护一个消息队列,但是Looper和Handler没有什么关系,从源码中可以看到Android提供了一个Thread继承类HanderThread可以帮助我们处理,在HandlerThread对象中可以通过getLooper方法获取一个Looper对象控制句柄,我们可以将这个Looper对象映射到一个Handler中来实现一个线程同步机制,Looper对象的执行需要进行初始化,可以调用Looper.prepare,使用Looper.release方法释放资源。

    (4)对于Android中Handler可以传递一些内容,通过Bundle对象可以封装String、Integer以及Blob二进制对象,我们通过在线程中使用Handler对象的sendEmptyMessage或sendMessage方法来传递一个Bundle对象到Handler处理器。对于Handler类提供了重写方法handleMessage(Message msg) 来判断,通过msg.what来区分每条信息。将Bundle解包来实现Handler类更新UI线程中的内容实现控件的刷新操作。相关的Handler对象有关消息发送sendXXX相关方法如下,同时还有postXXX相关方法,一个为发送后直接返回,一个为处理后才返回。

    (5)在Android中提供了一种有别于线程的处理方式,就是Task以及AsyncTask,从源码中可以看到是针对Concurrent的封装,开发人员可以方便的处理这些异步任务。

     

  • 相关阅读:
    PortalBasic Java Web 应用开发框架:应用篇(一) —— 配置文件
    PortalBasic Java Web 应用开发框架:应用篇(六) —— 公共组件
    PortalBasic Java Web 应用开发框架:应用篇(三) —— 国际化
    普通软件项目开发过程规范(五)—— 总结
    PortalBasic Java Web 应用开发框架:应用篇(四) —— 文件上传和下载
    PortalBasic Java Web 应用开发框架 —— 前言
    PortalBasic Java Web 应用开发框架:应用篇(二) —— Action 使用
    dll 问题 (转)
    不同服务器数据库之间的数据操作
    USB鼠标经常出现不能用的情况——解决方法
  • 原文地址:https://www.cnblogs.com/lyricgan88/p/3371769.html
Copyright © 2011-2022 走看看