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是为不同线程中所进行的活动排队。

Android 消息处理机制1(从源码分析)_第1张图片

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 camera capture
  2. Android学习笔记(7)————Android中的消息机制
  3. android 子线程handler 实现
  4. 简单说说android的线程封装
  5. Android子线程与子线程的通信
  6. android子线程中刷新界面控件
  7. Android应用程序键盘(Keyboard)消息处理机制分析(10)
  8. android 主线程和子线程之间的消息传递

随机推荐

  1. Android 编译流程解析01-AppPlugin初始化
  2. Android中PackageManager学习笔记(3)-Pac
  3. Android本地数据搜索实现
  4. 关于Android Studio关闭模拟器死机解决方
  5. 监听电话状态
  6. android WebView 应用内点击超链接不调用
  7. 《Android.Programming.Pushing.the.Limi
  8. Android 自定义设置文本字体间间距
  9. Android下的junit 单元测试
  10. Android 上下文菜单