Android 消息机制

Android 消息机制

  • Android 的消息机制也是Handler机制,主要作用是用来在不同线程之间通信,通常使用在子线程执行完成一些儿耗时操作,需要回到主线程更新UI时,通过Handler将有关UI操作切换到主线程。
  • 由于Android中主线程不可进行耗时操作,所有我们的网络请求只能放在子线程中,又由于在子线程中不能更新UI,所以我们就需要使用Handler切换到主线程并更新UI。

消息机制的工作流程

  1. 应用程序启动的时候,在主线程中会默认调用 Looper.preper() 方法,初始化Lopper对象绑定到当前线程中,并在Looper内部维护一个MessageQueue
  2. 接着调用Handler.sendMessage()发送消息,会通过MessageQueue.enqueueMessage()向MessageQueue中添加一条消息
  3. 主线程调用Looper.looper()开启循环,不断轮询消息队列,通过MessageQueue.next()取出消息
  4. 取出的message不为空则调用msg.target.dispatchMessage()传递分发消息,目标handler收到消息后会执行handler.handlerMessage()方法处理消息

Handler 面试题

  1. 一个线程有几个handler?
  2. 一个线程有几个Looper?如何保证?
  3. handler内存泄露原因?为什么其他的内部类没有说过有这个为题?
  4. 为何主线程可以new Handler?如果想要在子线程中new Handler要做些什么准备?
  5. 子线程中维护的Looper,消息队列无消息的时候的处理方案是什么?有什么用?
  6. 既然可以存在多个handler往messageQueue中添加数据(发消息时各个Handler可能处于不同线程),那些内部是如何确保线程安全的?
  7. 我们使用Message是应该如何创建它?
  8. 使用Handler的postDelay后消息队列会有什么变化?
  9. Looper死循环为什么不会导致应用卡死
相关推荐
还鮟6 分钟前
CTF Web的数组巧用
android
小蜜蜂嗡嗡1 小时前
Android Studio flutter项目运行、打包时间太长
android·flutter·android studio
aqi002 小时前
FFmpeg开发笔记(七十一)使用国产的QPlayer2实现双播放器观看视频
android·ffmpeg·音视频·流媒体
zhangphil3 小时前
Android理解onTrimMemory中ComponentCallbacks2的内存警戒水位线值
android
你过来啊你3 小时前
Android View的绘制原理详解
android
移动开发者1号6 小时前
使用 Android App Bundle 极致压缩应用体积
android·kotlin
移动开发者1号6 小时前
构建高可用线上性能监控体系:从原理到实战
android·kotlin
ii_best11 小时前
按键精灵支持安卓14、15系统,兼容64位环境开发辅助工具
android
美狐美颜sdk11 小时前
跨平台直播美颜SDK集成实录:Android/iOS如何适配贴纸功能
android·人工智能·ios·架构·音视频·美颜sdk·第三方美颜sdk
恋猫de小郭16 小时前
Meta 宣布加入 Kotlin 基金会,将为 Kotlin 和 Android 生态提供全新支持
android·开发语言·ios·kotlin