本文首发于公众号“AntDream”,欢迎微信搜索“AntDream”或扫描文章底部二维码关注,和我一起每天进步一点点
卡顿优化
这里主要介绍卡顿优化方面的布局优化
布局优化
1、 在主线程中,加载SP,或者是缓存加载,JSON解析,可以放到Idelhander
2、 viewpager的懒加载,用viewpager2替换viewpager,方便懒加载
ViewPager.offscreenPageLimit = 2
3、 布局嵌套层级优化时,自定义继承自ViewGroup的View中,如果本身继承自LinearLayout等布局,则可以考虑根布局使用merge标签,如果根布局使用merge标签,在LayoutInfater中必须指定attachToParent为true,否则会崩溃,同时this.addView就不需要了
4、 如果view不一定会显示,此时可以使用 ViewStub 来包裹此View 以避免不需要显示view但是又需要加载view消耗资源。viewstub是一个轻量级的view,它不可见,不用占用资源,只有设置viewstub为visible或者调用其inflflater()方法时,其对应的布局文件才会被初始化。
5、 检测工具: Layout Inspector
过渡渲染
开发者选项—>打开GPU过度绘制开关
- 检查是否重复设置background
布局加载优化
- LayoutInflflater加载xml布局的过程会在主线程使用IO读取XML布局文件进行XML解析,再根据解析结果利用反射创建布局中的View/ViewGroup对象。
- 可以用
Asynclayoutinflater
来异步加载
dependencies {
implementation "androidx.asynclayoutinflater:asynclayoutinflater:1.0.0" }
new AsyncLayoutInflater(this).inflate(R.layout.activity_main, null, new AsyncLayoutInflater.OnInflateFinishedListener(