必威体育Betway必威体育官网
当前位置:首页 > IT技术

Handle的详细用法

时间:2019-10-02 23:42:20来源:IT技术作者:seo实验室小编阅读:85次「手机版」
 

handlemessage

handler:是一个消息分发对象,进行发送和处理消息,并且其 Runnable 对象与一个线程messagequeue 关联。

作用:调度消息,将一个任务切换到某个指定的线程中去执行。

为什么需要 Handler?

子线程不允许访问 UI

假若子线程允许访问 UI,则在多线程并发访问情况下,会使得 UI 控件处于不可预期的状态。

传统解决办法:加锁,但会使得UI访问逻辑变的复杂,其次降低 UI 访问的效率。

引入 Handler

采用单线程模型处理 UI 操作,通过 Handler 切换到 UI 线程,解决子线程中无法访问 UI 的问题。

Handler 使用

方式一: post(Runnable)

创建一个工作线程,实现 Runnable 接口,实现 run 方法,处理耗时操作。

创建一个 handler,通过 handler.post/postDelay,投递创建的 Runnable,在 run 方法中进行更新 UI 操作。

new Thread(new Runnable() {
   @Override
   public void run() {
       /**
          耗时操作
        */
      handler.post(new Runnable() {
          @Override
          public void run() {
              /**
                更新UI
               */
          }
      });
   }
 }).start();

方式二: sendMessage(Message)

创建一个工作线程,继承 Thread,重新 run 方法,处理耗时操作

创建一个 Message 对象,设置 what 标志及数据

通过 sendMessage 进行投递消息

创建一个handler,重写 handleMessage 方法,根据 msg.what 信息判断,接收对应的信息,再在这里更新 UI。

private Handler handler = new Handler(){
    @Override
    public void handleMessage(Message msg) {
        super.handleMessage(msg);
        switch (msg.what) {      //判断标志位
            case 1:
                /**
                 获取数据,更新UI
                */
                break;
        }
    }
};
   
public class WorkThread extends Thread {

    @Override
    public void run() {
        super.run();
       /**
         耗时操作
        */
//从全局池中返回一个message实例,避免多次创建message(如new Message)
        Message msg =Message.obtain();  
        msg.obj = data;
        msg.what=1;   //标志消息的标志
        handler.sendMessage(msg);
    }
    
}
   new WorkThread().start();

相关阅读

C++ 什么是句柄?为什么会有句柄?HANDLE

出处:http://www.cppblog.com/mymsdn/archive/2009/02/19/handle-in-windows.html从广义上,能够从一个数值拎起一大堆数据的东西都

关于DuplicateHandle() 转换伪句柄成真实句柄值的疑问

参考:http://topic.csdn.net/u/20100806/09/f89294ac-fcf7-4a05-bb00-8480c3793ecb.html

Android多线程:HandlerThread详细使用手册

前言 多线程的应用在Android开发中是非常常见的,常用方法主要有:继承Thread类 实现Runnable接口 Handler AsyncTask HandlerThread

看springmvc适配器模式---HandlerAdapter

适配器模式 就是你有一个类接口,但是这个接口不太符合你的预期,如果要用他就需要在他的源码上进行一些修改,这时你可以做一个适配器

Bundle,Message,Handle用法解析

Bundle类介绍:        Bundle是一个载体,可以存放基本数据类型、对象等内容,相当于一辆汽车,可以装载很多东西,然后运到需要的

分享到:

栏目导航

推荐阅读

热门阅读