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性能不浪费。
构建者模式。
把这个框架讲烂。
每个任务代表一个线程
如果是uithread就那主线程发送消息,如果是子线程就用线程池。
里边有个linkedBlockingqueue 和ThreadFactory(线程从这里出来的)。
这个alphademo 跑一下。[代码等会传到github]
4、面试中怎么自如地说启动框架
解决启动框架的小demo先用起来。
- 1、Exector线程池怎么设计?
- 2、Task到底是什么?任务抽象
- 3、接口任务执行前执行后有哪些回调?
- 定义的接口叫onTastkListener 任务启动、结束、层面结束、任务错误。
- dag主要的目的是任务的调度
- TaskListener
- 等待延时
- 开始
- onFinish等待时间和消费时间。
-
4、MainExecutor 拿job 任务 线程池
-
5、一个任务会有
- 1、状态(阻塞 idle啥 running 执行)这个框架默认运行在子线程,
- 2、监听,集合去承装,会有子任务和父任务。放到线程池中去执行,任务要有它的状态。
-
6、注解自定义注解,
- 排序结果不唯一,同级之间的通过优先级排序。
- 拓补排序。或者用集合
- 引导面试官。方案一,优先级进行排序。方案二,CountDownLaunch。
-
7、了解Android startup启动源码。
5、启动优化核心就是DAG,基本的数据结构,所以要多刷题呀
6、自己在面试中说这个Appstart启动框架。这个非常重要。自己写出来。
-
每个任务的依赖的任务。
-
排序
-
找几个点说出来就好了。
7、启动框架到底解决了什么问题
-
线程池线程等待
-
线程 切换 主线程 子线程执行不一样
-
一个抽象类实现很多方法。