Handler

我们知道,android是不允许在子线程中更新ui的,但是为了避免anr,我们有时候不得不在子线程中去执行一些耗时操作,然后根据这些耗时操作的执行结果来更新ui界面。对于这种情况,android提供了一套异步消息处理机制。

异步消息处理机制

四部分

Message

又称消息,在不同线程之间交换数据

Handler

发送(sendMessage方法)和处理(handlerMessage方法)消息

MessageQueue

又称消息队列,存放所有通过handler发送的消息

Looper

每个线程中MessageQueue的管家,在调用Looper的loop方法后,会进入一个无限循环,当这个循环发现MessageQueue中存在Message时,就会将其取出并传入Handler的handleMessage方法中进行处理

处理流程

  1. 创建handler对象,重写handlerMessage方法;
  2. 当子线程需要进行ui操作时,创建一个message对象,通过handler的sendMessage方法发送出去;
  3. 被发送的message进入消息队列,等待looper处理;
  4. looper会不断尝试获取消息队列中的内容,获取后会将消息发送回handler的handleMessage方法中处理

一个message经过上述流程后,就从子线程进入了主线程,从不能更新ui变成了可以。

为什么说handler是在主线程运行的?

当我们创建handler对象时,需要改写handlerMessage方法,而此方法就是在主线程中运行的。这就是为什么我们可以在这个方法中,放心地执行ui操作

相关推荐

  1. Handler

    2024-01-09 00:20:01       62 阅读
  2. android-handler

    2024-01-09 00:20:01       35 阅读
  3. Android-消息机制Handler

    2024-01-09 00:20:01       57 阅读
  4. Handler原理总结

    2024-01-09 00:20:01       53 阅读
  5. brpc之acceptor&&handler

    2024-01-09 00:20:01       32 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-01-09 00:20:01       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-01-09 00:20:01       100 阅读
  3. 在Django里面运行非项目文件

    2024-01-09 00:20:01       82 阅读
  4. Python语言-面向对象

    2024-01-09 00:20:01       91 阅读

热门阅读

  1. C++ 基础知识体系

    2024-01-09 00:20:01       51 阅读
  2. python智能手机芯片

    2024-01-09 00:20:01       59 阅读
  3. 数据分析:从数据中获取有价值的洞察

    2024-01-09 00:20:01       63 阅读
  4. MongoDB

    2024-01-09 00:20:01       47 阅读
  5. 省事了:微信定时批量自动化发送聊天消息

    2024-01-09 00:20:01       59 阅读
  6. 数据库设计之三范式

    2024-01-09 00:20:01       64 阅读
  7. 循环链表和双向链表

    2024-01-09 00:20:01       49 阅读
  8. vue3.0与vue2.0-prop

    2024-01-09 00:20:01       58 阅读
  9. 2023秋电子科大信软 程算I 机考真题

    2024-01-09 00:20:01       42 阅读
  10. 子类重写父类的方法

    2024-01-09 00:20:01       61 阅读