Android 的 Handler 中,IdleHandler 的原理是怎样的?

回答·9
最热
最新
  • 我知道它干啥。。。。
  • IdelHandler 是 MessageQueue 类中的一个内部接口。通过注释我们可以知道改接口主要的功能是在 MessageQueue 空闲时执行,返回 false 只执行一次,执行完会 remove 掉。返回 true 会在每次 MessageQueue 空闲时循环执行。 原理:在 MessageQueue 类中的 next()方法中,首先会从队列(实际为单链表)Message 中取出同步消息(即 msg.target==null)的消息去执行,接来才会取异步的消息。队列消息处理完,最后才会取遍历 mIdleHandlers。
  • IdleHandler 是定义在 MessageQueue 中的一个接口,只有有一个方法 boolean queueIdle(); 返回 true 表示这个接口一直有效,当下次 cpu 空闲时还会调用;返回 false 表示这个接口只会被调用一次。 MessageQueue 里的 addIdleHandler 方法会将 IdelHandler 对象插入到 mIdleHandlers 列表里;queueIdle 方法会在 MessageQueue 的 next()方法中调用,具体逻辑是,当当前消息队列为空或者下一个消息的执行时间未到时,遍历 mIdleHandlers 列表中的 IdleHandler 对象执行其 queueIdle 方法。 根据 IdleHandler 的方法执行时机,可以做一些懒加载的任务,或者在 View 测量绘制完成后取 View 的宽度属性值等,Android framework 执行 GC 的时机也是利用 IdleHandler 实现的。
  • 看名字叫知道是空闲时 handler 了,就是 messagequeue 为空或者下一个消息处理时机还没到,闲也闲着,要不要干点事情呀,这不能执行耗时操作,一般做一些 UI 工作,内存紧张时触发 gc 等。
  • 鸡肋一样的存在...
  • 没有即时消息的时候,会运行 idlehandler 里面的任务,主要用来启动优化,非重要的 sdk 初始化。 但是慎用,因为可能会拖到很久才执行,如果消息队列里一直有消息
  • 当取到消息为空,也就是没有消息的时候,会遍历你的 idlehandle,然后执行你写的方法,最后,根据返回值判断是否移除你的 handle
  • 🤣看过也忘了,就像你问我 arraylist 源码,我说我真正了解过看过但是具体还是忘了,不过某些源码编写思想在以后写代码时候可能会有用
  • 不知道。