性能优化(七)-卡顿优化和布局

119 阅读2分钟

1、性能优化。内存,方案,线上检测的方法。

  • 怎么通过弱引用gcroot去处理。
  • 阈值的问题。
  • 还有就是上来就gc,并不代表回回收,也可能失效。suspend会引起性能问题。systemgc 间隔500ms或者5秒,再gc,保证gc成功。为什么?suspend过程中可能有抖动或者其它原因。dag问题,线程问题。

2、Android startup

android-startup/README-ch.md at master · idisfkj/android-startup · GitHub

3、AlphaStartUp启动框架

启动优化有哪些重要的点?启动优化解决的是任务之间的依赖关系。任何的task都有依赖关系。是一个有向无环图,bag。启动框架解决的就是任务之间的依赖问题,让CPU性能不浪费。

构建者模式。

image.png

把这个框架讲烂。

每个任务代表一个线程

如果是uithread就那主线程发送消息,如果是子线程就用线程池。

image.png

里边有个linkedBlockingqueue 和ThreadFactory(线程从这里出来的)。

image.png

这个alphademo 跑一下。[代码等会传到github]

4、面试中怎么自如地说启动框架

解决启动框架的小demo先用起来。

  • 1、Exector线程池怎么设计?
  • 2、Task到底是什么?任务抽象
  • 3、接口任务执行前执行后有哪些回调?
    • 定义的接口叫onTastkListener 任务启动、结束、层面结束、任务错误。
    • dag主要的目的是任务的调度
    • TaskListener
      • 等待延时
      • 开始
      • onFinish等待时间和消费时间。

image.png

  • 4、MainExecutor 拿job 任务 线程池 image.png

  • 5、一个任务会有

    • 1、状态(阻塞 idle啥 running 执行)这个框架默认运行在子线程,
    • 2、监听,集合去承装,会有子任务和父任务。放到线程池中去执行,任务要有它的状态。
  • 6、注解自定义注解,

    • 排序结果不唯一,同级之间的通过优先级排序。
    • 拓补排序。或者用集合
    • 引导面试官。方案一,优先级进行排序。方案二,CountDownLaunch。
  • 7、了解Android startup启动源码。

5、启动优化核心就是DAG,基本的数据结构,所以要多刷题呀

6、自己在面试中说这个Appstart启动框架。这个非常重要。自己写出来。

  • 每个任务的依赖的任务。

  • 排序

  • 找几个点说出来就好了。

7、启动框架到底解决了什么问题

  • 线程池线程等待

  • 线程 切换 主线程 子线程执行不一样

  • 一个抽象类实现很多方法。