美文网首页
Android应用优化方案

Android应用优化方案

作者: 辉__5187 | 来源:发表于2019-03-05 23:45 被阅读0次

    前言:

    前面两篇文章主要是讲关于activity、fragment生命周期方面的总结,这篇文章主要是总结在android应用开发过程的优化方案,还有一些常用的优化工具。优化的方向包括:启动速度、界面流畅性、内存使用情况、apk体积、耗电量、流量等方面。

    app启动速度

    1、通过style 设置一个默认的启动图来过度,从交互体验上来提高启动速度

    2、分析application和首屏的业务逻辑异步初始化第三方组件,防止阻塞主线程(或者延迟初始化(用的时候再初始化))

    3、闪屏的2秒停顿可以利用起来,把一些耗时操作延迟到这里来初始化

    4、同工具DDMS中的TraceView来检测耗时的点在哪里,做针对的处理

    5、mainActivity的onCreate流程,特别是UI的布局与渲染操作,如果布局过于复杂很可能导致严重的启动性能问题;(可以考虑先把mainActivity需要的数据请求回来),根据首页的结构可以考虑懒加载。

    Android APP启动优化: wuxiaolong.me/2017/03/13/…

    App启动速度优化之耗时检测处理: www.jianshu.com/p/a0e242d57…

    使用 TraceView 找到卡顿的元凶: blog.csdn.net/u011240877/…

    上面的几篇文章基本上描述了应用的启动流程,如何优化白屏,检测耗时以及一些SDK的懒加载等等...

    界面流畅性

    1、谈到UI流畅度,一般就是不要在主进程去做耗时的操作,提升UI的绘制速度(减少View的布局层级,避免过渡绘制等)

    2、merge、include、ViewStub标签的合理使用减少布局层级

    3、自定义view的ondraw里面不要做耗时的任务

    Android UI性能优化实战 :blog.csdn.net/lmj62356579…

    性能优化之布局优化: www.trinea.cn/android/lay…

    当然了对于UI卡顿,不可避免的要引入检测的方案:

    方式1:一般有监听Looper的日志

    方式2、利用Choreographer

    当然也相应的有一些开源工具:

    github.com/markzhai/An… [方式1]

    github.com/wasabeef/Ta… [方式2]

    github.com/friendlyrob… [方式2]

    内存优化

    内存优化那么主要就是去消除应用中的内存泄露、避免内存抖动。

    1、安卓studio的内存分析工具 + mat可以很好的检测内存抖动和内存泄露

    2、常见的内存泄露情况:

    ● 单例:生命周期很长,会引用生命周期比较短的变量,导致无法释放。例如activity泄露

    ● 静态变量:同样也是应为生命周期比较长

    ● 非静态内部类创建静态实例造成的内存泄漏

    ● handler内存泄露 (解决办法:Handler 声明为静态的,则其存活期跟 Activity 的生命周期就无关了。同时通过软引用的方式引入 Activity)

    ● 匿名内部类(匿名内部类会引用外部类,导致无法释放,比如各种回调)

    ● 资源使用完未关闭(BraodcastReceiver,ContentObserver,File,Cursor,Stream,Bitmap)

    ● 复用问题(bitmap释放)

    Android 内存优化总结&实践: mp.weixin.qq.com/s/2MsEAR9pQ…

    Android内存优化之OOM: hukai.me/android-per…

    Android应用内存泄露分析、改善经验总结: zhuanlan.zhihu.com/p/20831913

    apk体积优化

    代码瘦身

    ● 移除无用代码、功能;

    ● 移除无用的库、避免功能雷同的库;

    ● 启用Proguard;

    ● 缩减方法数;

    ●第三方开源库的瘦身,仅保留自己需要的部分

    资源瘦身

    ● 移除无用的资源文件;

    ● Drawable目录只保留一份资源;

    ● 对图片进行压缩;

    ● PNG转换JPG;

    ● 使用矢量图;

    ● 使用WebP;

    ● 资源混淆;

    ● 资源在线化;

    ● 能不用图片的就不用图片实现,用代码实现

    So瘦身

    ● 在允许的情况下,针对用户机型分布保留特定架构的So;

    耗电量

    电量是移动设备非常宝贵的资源,作为一名开发者,有必要为用户着想,减少电量的消耗.调查显示通常只有30%左右的电量是被程序核心的功能所消耗,比如界面渲染,剩下的70%则是被上报数据,位置更新,后台通知所消耗.

    如何检测

    1、手机选项中通过查看APP的电量消耗的统计数据

    2、使用Battery Historian Tool来查看详细的电量消耗

    如何优化

    ●减少唤醒屏幕的次数与持续的时间,正确的使用WakeLock.

    ●延迟非必须的操作到充电状态时,比如日志上报完全可以在夜间充电时完成,这点可以结合JobScheduler使用

    ●使用传感器采集数据时,一旦不需要记得取消注册.

    ●减少网络通信,合并通信.

    ●合理使用定位功能,减少位置更新频率以及根据实际情况使用不同精度的定位需求

    网络优化

    现在App几乎都需要联网操作,做好网络优化一方面可以提高体验,另一方面可以减少流量和电量的损耗.另外,无论是对用户还是网络服务提供者,网络同样是一种资源,任何开发者都不应该假设网络资源是无限制的

    如何检测

    ●使用Android Studio里的Network Traffic Tools来查看网络请求

    ●使用Android Studio中的Monitor,安卓studio3.0新的性能分析工具更方便

    ●使用Fidder或者Charles等抓包工具分析网络数据包

    如何优化

    ●有必要的时候务必做好缓存,无论是图片还是普通的数据,使用LruCache和DiskLruCache构建自己的缓存系统,并根据实际场景设计缓存策略

    ●避免过度的网络同步,合并相关的网络请求

    ●根据实际场景确定请求策略,避免使用固定的间隔频率来进行网络操作.比如连接WiFi并充电的情况下请求频率可以高,第一次网络请求失败后可以使用双倍的时间间隔来进行下一次

    ●减少数据传输量,对传输的数据做压缩.如果传输的是图片,需要选择合适的图片格式以及根据显示大小请求合适规格的图片.对于普通数据,可以考虑使用ProtocalBuffers来减小传输数据的大小.

    文章转自 https://juejin.im/post/5a26919b51882533d022ed04

    相关文章

      网友评论

          本文标题:Android应用优化方案

          本文链接:https://www.haomeiwen.com/subject/qwokgftx.html