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

Android APP启动优化

临时抱佛脚:IdleHandler 的原理分析和妙用 - 知乎

大致的流程是这样的:

  1. 如果本次循环拿到的 Message 为空,或者这个 Message 是一个延时的消息而且还没到指定的触发时间,那么,就认定当前的队列为空闲状态。
  2. 接着就会遍历 mPendingIdleHandlers 数组(这个数组里面的元素每次都会到 mIdleHandlers 中去拿)来调用每一个IdleHandler 实例的 queueIdle 方法
  3. 如果这个方法返回false的话,那么这个实例就会从 mIdleHandlers 中移除,也就是当下次队列空闲的时候,不会继续回调它的 queueIdle 方法了。

处理完 IdleHandler 后会将 nextPollTimeoutMillis 设置为0,也就是不阻塞消息队列,当然要注意这里执行的代码同样不能太耗时,因为它是同步执行的,如果太耗时肯定会影响后面的 message 执行。

系统中的使用:

handleResumeActivity() 方法中末尾会执行 Looper.myQueue().addIdleHandler(new Idler()),也就是说在 onResume 等方法都执行完,界面已经显示出来了

可以看到在 queueIdle 方法中会进行回收等操作,下面会详细讲解,但这一些都是等 onResume 方法执行完,界面已经显示这些更重要的事情已经处理完了,空闲的时候开始处理这些事情。也就是说系统的设计逻辑是保障最重要的逻辑先执行完,再去处理其他次要的事情。

但是如果 MessageQueue 队列中一直有消息,那么 IdleHandler 就一直没有机会被执行,那么原本该销毁的界面的 onStop,onDestory 就得不到执行吗?不是这样的,在 resumeTopActivityInnerLocked() -> completeResumeLocked() -> scheduleIdleTimeoutLocked() 方法中会发送一个会发送一个延迟消息(10s),如果界面很久没有关闭(如果界面需要关闭),那么 10s 后该消息被触发就会关闭界面,执行 onStop 等方法。

常见使用方式

  1. 在应用启动时我们可能希望把一些优先级没那么高的操作延迟一点处理,一般会使用 Handler.postDelayed(Runnable r, long delayMillis)来实现,但是又不知道该延迟多少时间比较合适,因为手机性能不同,有的性能较差可能需要延迟较多,有的性能较好可以允许较少的延迟时间。所以在做项目性能优化的时候可以使用 IdleHandler,它在主线程空闲时执行任务,而不影响其他任务的执行。
  2. 想要在一个 View 绘制完成之后添加其他依赖于这个 View 的 View,当然这个用View.post()也能实现,区别就是前者会在消息队列空闲时执行
  3. 发送一个返回 true 的 IdleHandler,在里面让某个 View 不停闪烁,这样当用户发呆时就可以诱导用户点击这个View,这也是种很酷的操作

“终于懂了”系列,Android启动优化~


http://www.kler.cn/news/273041.html

相关文章:

  • 18个惊艳的可视化大屏(第26辑):航空与运输业
  • 基于单片机的老人防丢系统设计
  • python 基础知识点(蓝桥杯python科目个人复习计划65)
  • yocto系列之针对从git仓库获取源代码编写recipe
  • 2024蓝桥杯每日一题(DFS)
  • 2024.2.28 校招 实习 内推 面经
  • 2024/3/14打卡棋子(14届蓝桥杯)——差分
  • 【Godot4.2】任意多边形或折线围绕任意点旋转
  • 【LAMMPS学习】二、LAMMPS安装(3)通过Conda/tarball/git安装LAMMPS
  • Git 仓库瘦身与 LFS 大文件存储
  • 面试 Java 并发编程八股文十问十答第十期
  • leetcode116填充每个节点的下一个右侧节点指针
  • 证书转换 .cer .pfx 证书转换成 .pem证书
  • mysql笔记:15. 事务和锁
  • IT系统可观测性
  • Java单例模式
  • 2024年发布jar到国外maven中央仓库最新教程
  • 后端工程师快速使用axios
  • C语言简单题(7)从主函数中输入10个等长字符串,用一个函数对他们排序,然后在主函数输出这10个已排好序的字符串
  • 旅游管理系统|基于SpringBoot+ Mysql+Java+Tomcat技术的旅游管理系统设计与实现(可运行源码+数据库+设计文档+部署说明+视频演示)