Android学习笔记十三:性能优化

2019-03-28 08:26 评论 0 条

摘要:

应用程序开发完成,只是完成了其中一小方面,应用程序的异常处理,日志分析和性能优化是更重要的一方面,目的是让用户喜欢和享受体验的过程。因此,结合自身经历和读过的书籍,从绘制优化、内存优化、安装包大小和存储优化几方面做一些总结。

绘制优化

  • 减少布局控件嵌套层级,推荐使用ConstraintLayout>LineartLayout>RelativeLayout
  • 检查嵌套布局层级控件的背景,清除不必要的背景绘制
  • 刷新控件,缩小刷新的区域
  • 推荐使用属性动画代替补间动画、帧动画
  • 开启硬件加速,提升绘制速度

内存优化

  • 使用Android Profile(Memory Monitor)、Leak Canary检查可能内存泄露的位置,将对象置空或使用软引用、弱引用
  • 存储1000以内键值对,使用ArrayMap代替HashMap,同时使用集合时根据数据量指定合适和长度
  • 选择合适的数据类型,byte占1字节,char占2字节,short占2字节,int占4字节,float占4字节,long占8字节,double占8字节
  • 可能的情况下,使用位运算代替逻辑运算
  • 根据需要,合理选择软引用、弱引用、虚引用和强引用
  • 使用基本数据类型boolean、byte、char、int、float、long、double自动装箱,开销更大,占用内存更多
  • 出现大量重复的子控件,使用ViewHolder实现视图复用,比如:ListView、RecyclerView
  • 使用注解的方式代替枚举检查类型安全,枚举类型占用内存是普通常量定义的三倍
  • 在大多数情况下考虑使用Application Context 代替Activity Context,除了start a activity/show a dialog/inflate a layout等外

安装包大小优化

  • 在不影响图片质量的情况下,对图片进行压缩处理,图片压缩参考 【使用pngquant来压缩png资源缩小apk】http://www.cnblogs.com/soaringEveryday/p/5148881.html
  • 将png图片转换成webp,选中需要转换的图片,右键“Convert to WebP”,完成转换
  • 根据项目实际情况,剔除可能没有使用到的多套资源图片,比如:ldpi
  • 使用属性动画代替多个图片的帧动画效果,比如:多个图片实现的加载进度条效果
  • 使用代码代替图片设置控件的背景效果,比如:控件圆角效果,图层的叠加效果,阴影效果
  • 使用proguard工具混淆代码,编译代码时将没有用到的类、方法删除,减少打包apk文件的大小
  • 使用Android Lint(Inspect Code)工具,分析代码,清除没有使用到的资源文件、代码和相关类等
  • 根据项目实际情况,剔除可能没有用到的so文件,比如:x84和x84_64的架构是在模拟器上使用的,那么在打包发布的时候,可以有选择设置平台架构
  • 充分利用Android SDK提供的资源文件和类文件,尽量不引入第三方库或者可以有选择地定制第三方库(重新打jar包)
  • 学习动态加载技术(插件化)和热更新技术

存储优化

  • SharedPreferences初始化整个文件并读入内存,文件不适合存储大量数据,异步提交数据的apply方法比commit方法性能更优。考虑同步锁的问题,SharedPreferences不适合频繁地读写数据,减少不必要的调用。跨进程过程,需要搭配ContentProvider一起使用,耗时增加了三倍左右,非跨进程的情况下禁用ContentProvider
  • SQLite数据库不支持线程同步,考虑使用同步方法和单例模式封装SQLiteOpenHelper。在Application 的onCreate方法中初始化SQLiteOpenHelper并在应用程序结束时及时关闭数据库。插入数据时,显示地创建SQLiteStatement,避免系统频繁创建事务影响性能,事务是提高速度最有效的方式,另一个优点保证提交的原子性。索引检索数据有效提升速度,但在更新和删除数据时性能会降低。使用双缓存机制,把常用的数据保存到内存,再通过异步的方法更新到数据库。

当前文章价值6.71元,扫一扫支付后添加微信提供帮助!(如不能解决您的问题,可以申请退款)

你可能感兴趣的文章

来源:每日教程每日一例,深入学习实用技术教程,关注公众号TeachCourse
转载请注明出处: https://www.teachcourse.cn/2720.html ,谢谢支持!

资源分享

分类:面试题汇 标签:
wordpress异常:Uncaught Error Call to undefined function get_magic_quotes_gpc() wordpress异常:Uncaught Erro
选择排序算法 选择排序算法
python对文件的操作 python对文件的操作
浅谈AnalogClock和DigitalClock 浅谈AnalogClock和DigitalCl