Android超复杂布局加载速度优化
一、概述
有时候由于实际业务的需要,或者产品经理或设计师考虑的不够全面,会导致某一个或某些页面的布局超级复杂。这些超级复杂的UI在经过程序员通过传统布局优化过后仍然是复杂的(优化布局层级、优化层级布局数量等)。
这就会导致布局加载速度过于缓慢。直接的结果就是打开Activity的速度回变慢,测试没发接受会被打回。
二、思路及实践
思路:
在没有更好的优化措施下,我们可以使用分步加载。即:如果一次性加载会使布局的渲染速度缓慢,那么我们就把布局拆分为多个小布局,分步按照时间顺序进行加载。
实践:
1.住布局文件中只保留骨架(保证Activity的打开速度不受影响)
2.使用LayoutInflater.from(context).inflater加载拆分好的小布局
3.在数据加载成功后将小布局的ViewGroup通过root.addView的形式添加进容器布局中
4.此时有个重中之重。如果你的小布局很多且是串行加载进去且没有时间间隔,则布局的显示速度依然是和缓慢的的
5.解决4的问题的关键就在于,分步、定时、有序的加载。即:加载A布局结束50毫秒后加载B布局,B布局加载结束50毫秒后加载C布局,依次类推。
6.这利用时间来换取加载速度加速布局的显示是一个相对能够接受的方案。
示例代码如下(参考):
/** * 定时分步加载(防止由于布局复杂导致cpu过载) */ private fun loadLayouts() { linearContainer.postDelayed({ addBaseInfoLayout() linearContainer.postDelayed({ addInfoOrgFrameLayout() linearContainer.postDelayed({ addInfoSuperiorAndSubordinateLayout() linearContainer.postDelayed({ addInfoBottomGuideLayout() }, 50) }, 50) }, 50) }, 50) }