App性能优化

性能优化:

 用户体验的性能主要总结为4个类别:

  • 流畅:使用时避免出现卡顿,响应速度快,减少用户等待的时间,满足用户期望。
  • 稳定:减低crash率和ANR率,不要在用户使用过程中崩溃和无响应。
  • 省点、省流量:节省流量和耗电,减少用户使用成本,避免使用时导致手机发烫。
  • 安装包小:安装包小可以降低用户的安装成本。

卡顿优化:

 卡顿的场景有很多,可分为4类:UI绘制、应用启动、页面跳转和事件响应,这4种卡顿的原因可为2大类:

  • 界面绘制:绘制的层级深、页面复杂、刷新不合理,这些原因卡顿的场景更多出现在UI和启动后的初始界面以及跳转页面的绘制上。
  • 数据处理:导致卡顿的原因是数据处理量太大,可分为如下3种情况

   (1)、数据处理UI线程。
   (2)、数据处理占用CPU高,导致主线程拿不到时间片。
   (3)、内存增加导致GC频繁,从而引起卡顿。
优化建议:

 1.布局优化:主要通过减少层级、测量、绘制时间和提高复用性方面入手,总结如下

  • 减少层级:合理使用RelativeLayout和LinerLayout,合理使用Merge。
  • 提高显示速度:使用ViewStub,它是一个看不见、不占布局位置、占用资源非常少的视图对象。
  • 布局复用:通过<include>标签提高布局复用
  • 减少测量:尽可能少用wrap_content,它会增加布局measure时计算成本,在已知宽高为固定值时,不用wrap_content。
  • 删除控件中无用的属性  

 2.过度绘制:屏幕上的某个像素在同一帧时间内被绘制多次,从而浪费多余的CPU以及CPU资源,避免过度绘制方法如下:

  • 布局上优化:移除XML中非必要的背景、Window默认的背景、显示占位背景图片。
  • 自定义View优化:使用canvas.clipRect()帮助系统识别可见的区域,只有这个区域内才会被绘制。

 3.启动优化:优化启动逻辑,提高应用的启动速度。启动主要完成UI布局、绘制和数据准备,因此启动速度优化需要以下三个过程:

  • UI布局:应用一般都有闪屏页,优化闪屏页的UI布局,可通过Profile GPU Rendering检测丢帧情况
  • 加载逻辑优化:采用分布加载、异步记载、延期加载策略提高应用启动速度。
  • 数据准备:数据初始化分析,记载数据可用线程初始化等策略。

 4.合理刷新:数据变化,需要刷新页面展示新的数据,频繁刷新会增加资源开销,并且可能导致卡顿,合理刷新注意以下几点:

  • 尽量减少刷新次数。
  • 尽量避免后台有高的CPU线程运行。
  • 缩小刷新区域

 5.动画优化:有些情况下,实现动画效果时,可以用硬件加速方式提供流畅度。

优化内存:

 没有内存泄露,并不意味内存就不需要优化,Android系统对每个应用进程都分配有限的堆内存,因此使用最小内存对象或资源可以减小内存开销,同时让GC高效地回收不需要的对象,让也能够用堆内存保持充足的可用内存,使应用更稳定高效地运行,常见做法如下:

  • 对象引用:强引用、软引用、弱引用、虚引用四种引用类型,根据业务需求合理使用引用类型。
  • 减少内存开销:注意自动装箱,增加内存复用。比如有效利用系统自带资源、视图复用、对象池、Bitmap对象的复用
  • 使用最优数据类型:例如针对数据类型容器结构,可使用ArrayMap数据结构,避免使用枚举类型、缓存Lrucache等
  • 图片内存优化:可设置位图规格,根据采样因子做压缩,用一些图片缓存方式对图片进行管理等。

稳定性优化:

 内存使用不合理、代码异常场景考虑不周全、代码逻辑不合理等,都会影响,最常见的两个场景Crash和ANR,这两个错误将会导致程序无法使用,常用的解决方法如下:

  • 提高代码质量:比如开发期间代码审核,看些代码逻辑,业务合理性等。
  • 代码静态扫描工具:常见工具有Android Lint、Findbugs、Checkstyle、PMD等。
  • Crash监控:记录崩溃信息、异常信息,以便后续分析解决。
  • Crash上传机制:尽量保存日志到本地,有网络时再上传日志信息。

耗电优化:

  • 计算优化,避开浮点运算等。
  • 避免WaleLock使用不当
  • 使用Job Scheduler

安装包大小

 

转载于:https://www.cnblogs.com/Mr-Deng/p/11425361.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值