前言:

前面两篇文章主要是讲关于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来减小传输数据的大小.

Android应用优化方案相关推荐

  1. Android应用优化方案三

    Android应用优化方案一 点击进入 Android应用优化方案二 点击进入 Android应用优化方案三 布局优化 布局优化的思想很简单,尽量减少布局的层级,布局层级减少绘制时间就会跟着减少,从而 ...

  2. Android应用优化方案四

    Android应用优化方案一 点击进入 Android应用优化方案二 点击进入 Android应用优化方案三 点击进入 Android应用优化方案四 在Java中,内存的分配是由程序完成的,而内存的释 ...

  3. android布局优化方案,Android启动优化-布局优化

    Android启动优化-布局优化 安卓应用开发发展到今天,已经成为一个非常成熟的技术方向,从目前的情况看,安卓开发还是一个热火朝天的发展,但高级人才却相对较少,如今移动互联网的开发者也逐渐开始注重插入 ...

  4. android 启动优化方案,Android 项目优化(五):应用启动优化

    介绍了前面的优化的方案后,这里我们在针对应用的启动优化做一下讲解和说明. 一.App启动概述 一个应用App的启动速度能够影响用户的首次体验,启动速度较慢(感官上)的应用可能导致用户再次开启App的意 ...

  5. 浅谈Android性能优化方案

    经过前一阶段的调查,大概对性能优化已经有了初步的解决方案: 先给大家介绍一下UC公司的性能优化指标以及部分方案: 一.性能优化六项指标: 性能.内存.稳定性.流量.电量.安装包大小: 二.背景 --- ...

  6. 史上最全Android性能优化方案解析

    Android中的性能优分为以下几个方面: 布局优化 网络优化 安装包优化 内存优化 卡顿优化 启动优化 -- 一.布局优化 布局优化的本质就是减少View的层级.常见的布局优化方案如下: 在Line ...

  7. Android应用优化方案一

    1. 为什么需要性能优化? 上面说到,在时间窗口期内开发出产品是极端重要的,但是虽然基本功能我们实现了,但是开发出来的产品代码运行的效率怎么样呢?我们的App用户给用户的体验如何呢? 我们的App在低 ...

  8. Android启动优化方案调研

    /   今日科技快讯   / 7月21日,国家互联网信息办公室依据<网络安全法><数据安全法><个人信息保护法><行政处罚法>等法律法规,对滴滴全球股份 ...

  9. Android 性能优化之线程优化

    Android线程调度机制 线程调度模型 分时调度模型: 所有的线程轮流获得CPU使用权,平均分配每个线程占用的cpu时间 抢占式调度模型(Android):优先让可运行池中的优先级高的线程占用cpu ...

最新文章

  1. Springboot整合freemarker和相应的语法
  2. 应用程序控制策略——AppLocker
  3. java中有几种内部类,Java中的四种内部类
  4. linux 控制网卡流量,如何管理和控制多网卡 Linux 虚拟机的流量走向
  5. 走进WebApiClientCore的设计
  6. 栈应用_计算按运算符优先级分布的算式(代码、分析、汇编)
  7. 关于COM的Reg-Free(免注册)技术简介及实例讲解。
  8. Cogs 2221. [SDOI2016 Round1] 数字配对(二分图)
  9. CAD2016软件安装教程
  10. Oracle 数据库 各种索引类型 简单介绍
  11. html5 logo背景透明度,使用纯洁的CSS实现HTML5的新logo
  12. java射击_java射击类游戏
  13. JavaScript学习 — 初识json
  14. IDEA如何多次启动同一个程序
  15. java.lang.ArithmeticException: Non-terminating decimal expansion; no exact representable decimal
  16. Python-基本数据类型-整型、字符串
  17. SDUT-3526 团战可以输,提莫必须死(BFS)
  18. html怎么让歌一直播放,ppt如何设置背景音乐从开头一直播放到结束
  19. 当初不该学php 歌曲,幻城电视剧主题歌曲《不该》歌词
  20. 沃尔玛确立向资源可再生型公司转型的目标

热门文章

  1. (iOS-基本知识)堆和栈的基本知识详解
  2. LeetCode Group Anagrams
  3. eachart图表100px大小原因,及处理办法
  4. Python的全局和局部变量
  5. linux 和windows 下golang安装
  6. 【bzoj2694】Lcm 莫比乌斯反演+线性筛
  7. 【Python算法】哈希存储、哈希表、散列表原理
  8. 【BZOJ-1113】海报PLA 单调栈
  9. 一种生成不重复数的算法
  10. Application与线程同步