Android 性能调优的总结

      经过一段时间的面试,发现很多大公司对“性能调优”这部分的技术提问最多,而且都比较深入,所以今天汇总一下“性能调优”相关技术点,先上一张汇总思维导图

性能调优

        性能调优总结起来就是4个字 “快、稳、省、小”

 1)快

           UI

                     布局:1.少使用嵌套布局,多用ContraintLayout。

                                2.使用 merge 去除冗余的节点与嵌套。

                                3.使用 include 提高布局的复用率。

                                4.使用 ViewStub 实现懒加载,需要时才加载。

                     绘制: 1.尽量在多使用缓存,减少绘制次数。

                                 2.通过Profile GPU Rendering检测渲染有问题的界面。

                                 3.通过Hierarchy Viewer来查看布局层次和每个View所花的时间。

                                 4.Android Profile CPU检测。

                     动画:1.避免多个View同时执行动画操作。

                                2.使用多图片操作动画时候,应该需要对图片大小进行优化,以防低端手机OOM。

                                3.适当使用 Hardware Layer 提升Android动画性能。

           启动

                     冷启动:1.避免在Applcation的onCreate主线程中过渡初始化。

                                    2.避免在MainActivityonCreate主线程中过渡初始化。

                                    3.主题中的windowIsTranslucent设置为true去掉启动app时的黑屏或者白屏。

                                    4.设置主题中windowBackground,消除启动时的白屏/黑屏。

                     热启动:1.避免在onResume主线程中实现较多的阻塞工作。

           跳转

                     1.A跳转到B,需要经历A的onPause,B的onCreate,onStart,onResume,所以在这几个方法中不能做耗                                                时的操作。

                      2.一进入页面不可见的视图可以用ViewStub做延迟加载。

                      3.网络请求可以在加载完页面控件后再进行。

           响应

                       1.避免主线程中操作耗时的任务(数据加载、过渡UI更新等等)。

                           

 2)稳

           内存泄漏(生命周期长的对象引用生命周期短的对象)

                        1.非静态内部类的实例(Handler)

                        2.Bitmap

                        3.资源对象未关闭(Cursor)

                        4.静态变量。

           内存溢出(OOM)

                       1.Bitmap

                       解决方式:可以通过android:process=":xxx",实现同多进程方式,分散内存占用。

           ANR

                       1.Service 处理超时(20秒)

                       2.Broadcastt 处理超时(10秒)

                       3.Input 处理超时(按键、触屏、轨迹等输入事件,5秒没有反应)

                       分析ANR方法:通过查看 /data/anr 里面含有trace.txt文件可以分析

           阻塞

                       1.不要在主线程中执行一些耗时的任务。

           代码质量

                        1.使用Bugly实时记录程序BUG情况。

                        2.可以使用“埋点”的开发思想,记录程序使用情况。

                        3.使用“高复用、低耦合、去依赖、易扩展、易维护”的设计思想。

  3)省

           电量 

                         当应用退到后台时,一切的界面刷新都没有意义与浪费内存与电量,如以下操作:

                         1.系统广播接收(网络状态、屏幕显示状态)。

                         2.数字传输(蓝牙、wifi、移动网络)。

                         3.位置服务。

                         我们这通过AlarmManagerWakeLockJobScheduler的API,根据需求拟定比较好的后台任务执行机制,

                     实现电量的优化。

           流量 

  4)小

           APK瘦身

                   1.使用 Android Lint 检测无用的图片。

                   2.使用 TinyPng 工具,将图片转换为 WebP 格式或者有损压缩png/jpeg,进一步缩小图片的体积。

                   3.多使用 Vector 矢量图。

                   4.去除无用的库 。

猜你喜欢

转载自blog.csdn.net/qwe851023/article/details/82720819