Handler 作为Android 的常客,同时在安卓系统上占着重大地位,就拿Activity 的生命周期、事件分发来说都是由Handler 来处理消息,并分发消息。

1.Handler 是什么?
Android 消息处理机制 (发送消息 和 处理消息)以及 UI 更新机制 (main 线程 和子线程[不能更新 UI] 交互)

[ 官方文档介绍: ]

A Handler allows you to send and process Message and Runnable objects associated with a thread’s MessageQueue.


大概翻译:
Handler 允许 你去发送和处理 消息或者是发送处理绑定在线程消息队列中的runnable对象,每一个Handler实例都联系到一个单一的线程和那个线程的消息队列中。当创建一个新的Handler,他将绑定到这个线程或者是创建Hanlder的线程的消息队列。从这一点上来看,它会传递信息和消息队列的rannables并在消息弹出消息队列时执行它们。Handler有两个主要的用途:1是调度消息和runnables在未来执行的时间;2是为不同线程中所进行的活动排队。

2.为什么要用 handler ?

3.为什么要通过 Handler 更新 UI 呢?

  1. 防止多个线程去更新 UI 造成错乱现象
  2. 加锁影响效率

4.使用 Handler 遇到的问题

  1. 内存泄漏
  2. 消息阻塞,导致 ANR
  3. 子线程不通过Handler 更新UI,会抛异常 (短时间内不会抛出异常 原因:framework api 要判断 sdk >11)
  4. 子线程创建 Handler 没有传 Looper 对象

5.如何实现一个与线程相关的 Handler

Looper

class LooperThread extends Thread {      public Handler mHandler;      public void run() {          Looper.prepare();          mHandler = new Handler() {              public void handleMessage(Message msg) {                  // process incoming messages here              }          };          Looper.loop();      }  }

6.HandlerThread 又是什么?

是 Google 为了 简化 异步操作导致 Looper = null 情况下 封装的一个 线程类

HandlerThread handlerThread = new HandlerThread("");        Handler handler = new Handler(handlerThread.getLooper()){        @Override        public void handleMessage(Message msg) {            //异步操作  耗时操作        }    };

7. Android中更新UI的几种方式

  1. Handler post //源码分析 同样发送 Message 对象
  2. Handler 发送 Message 回调 handleMessage();
  3. runOnUiThread(Runnable r); // 内部也采用 Handler 机制
  4. View.post();// 内部也采用 Handler 机制

好了,到此结束~~~
下篇从源码分析Android 消息处理机制

更多相关文章

  1. Android中Toast如何在子线程中调用
  2. android中Invalidate和postInvalidate的区别
  3. Android版本更新实现
  4. Andriod-View绘制流程
  5. 《宅男的android开发指南》(翻译)--8
  6. Android消息机制Message消息池
  7. Android(安卓)Volley 库通过网络获取 JSON 数据
  8. 在Android中使用Handler和Thread线程执行后台操作
  9. Android的线程使用来更新UI----Thread、Handler、Looper、TimerT

随机推荐

  1. 接口幂等性的几种解决方案,你学废了吗?
  2. 面试知识点之javascript中变量与函数重名
  3. c、c++三种传参方式比较
  4. history命令时间格式设置教程
  5. HTML5-02-链接元素
  6. Linux下的sed,和awk命令使用分析
  7. HTML5-01-文本元素
  8. 分享:webstorm常用快捷键
  9. linux无法登陆问题常规排查项总结
  10. 分享:有关Linux服务器(在防火墙iptables)开