MicroKibaco / CrazyDailyQuestion

每日一问: 水滴石穿,聚沙成塔,坚持数月, 必有收获~
35 stars 1 forks source link

2019-09-03: 如何优化Activity的启动耗时?主要在哪些点上进行优化? #28

Open liyilin-jack opened 5 years ago

firehell commented 5 years ago

配置style,给启动页加上windowbackground application里面减少项目启动时初始化的项目,延迟加载一些非必须初始化 减少activity的布局层级,扁平化布局,防止过量绘制和绘制时间过长 数据加载先从缓存和数据库中取,最后从网络获取数据

liu1813565583 commented 5 years ago

可以减少布局的嵌套,尽量少在Application里进行耗时操作。 减少首次加载view的数量,减少过度绘制。

cuixbo commented 5 years ago

优化Activity的启动耗时: 1.通过Intent中的bundle进行数据传递时需要注意数据量的大小,以及优先考虑使用Parcelable。 2.从交互设计层面讲,可以添加Loading过渡页面。 3.使用RelativeLayout/ConstrainLayout和merge减少和优化xml布局层级,使用ViewStub延迟加载。 4.使用开发者模式下的“调试GPU过渡绘制”功能进行检查,防止和减少过渡绘制,比如Activity的theme中的背景,布局、控件的背景重叠等过渡绘制等问题;在自定义View时也可以使用canvas.clipRect()方法来优化过渡绘制。 5.不要在Activity的启动生命周期中执行耗时的操作,可以根据情况使用异步或者延迟执行。

rainbow7 commented 5 years ago

单纯说Activity启动耗时的话,应该主要看布局了。另外保持onCreate onStart几个方法不要去做耗时的事情。

chinwetang commented 5 years ago

按需加载布局,最近刚做了一个详情页,适用于多种详情,大部分布局相同,小部分布局不同,根据接口状态进行选择,我的做法是把界面按照功能点封装成多个View,再根据接口返回的数据确定要加载哪些View,add上去。

gys0000 commented 5 years ago
pioneerz commented 5 years ago

昨天分析startActivity时,我们就可以知道优化activity启动时间的几个方向: 1.布局优化:减少布局层次,删除无用的控件和层级,相同的部分使用include加载。 2.耗时操作优化:不要在activity的生命周期里做耗时操作,可以使用异步加载方案。 3.延时加载:减少大量的数据同时加载,比如viewpager中有多个fragment,当打开该activity的时候只加载当前fragment的数据,这其实就是我们所说的懒加载。 4.自定义控件优化:在onDraw中不要用耗时操作,也不要创建大量的局部对象。

GPU渲染模式分析 你可以通过gpu渲染模式分析图,再通过adb命令到处相应的文件去分析大概的耗时操作。