当前位置: 首页 > news >正文

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死循环为什么不会导致应用卡死

http://www.lryc.cn/news/189187.html

相关文章:

  • QT计时器QTime的使用举例
  • js中await用法
  • Qt多工程同名字段自动翻译工具
  • vue3+elementui实现表格样式可配置
  • x11截屏源码(ubuntu18.04)
  • 【ComfyUI】MacBook Pro 安装(Intel 集成显卡)
  • HTTPS 加密全过程
  • 联邦学习综述二
  • Idea本地跑flink任务时,总是重复消费kafka的数据(kafka->mysql)
  • 基于nodemailer实现邮件发送
  • 【PostgreSQL内核学习(十八)—— (数据库表参数)】
  • 区块链的两个核心概念之一签名, 另一个是共识.
  • wpf中prism框架切换页面
  • 正则表达式(Regular Expression)学习网址分享
  • 【已解决】socket.gaierror: [Errno -3] Temporary failure in name resolution
  • CUDA code=700(cudaErrorIllegalAddress) 报错与排查方法
  • 项目管理过程组
  • python每日一练(5)
  • 经典循环命题:百钱百鸡
  • IDEA使用模板创建webapp时,web.xml文件版本过低的一种解决方法
  • 在Openresty中使用lua语言向请求浏览器返回请求头User-Agent里边的值
  • Hive面试常见基础问题
  • 设计模式 - 观察者模式
  • 【自动驾驶】PETR/PETRv2/StreamPETR论文分析
  • GPT实战系列-Baichuan2本地化部署实战方案
  • 用netty实现简易rpc
  • 【计算机网络】第三章课后习题答案
  • cesium 地图蒙版遮罩效果
  • 根据前序遍历结果构造二叉搜索树
  • 微信小程序指定某个元素强制重新渲染