2017-01-23 14:10:36下面是收集的一些Android应用性能调优点:

使用异步

保持APP的高度响应,不要在UI线程做耗时操作,多使用异步任务
使用线程时要做好线程控制;使用队列、线程池
谨慎使用糟糕的AysncTask、Timer
警惕异步任务引起的内存泄露
应该异步任务分类,比如HTTP,图片下载,文件读写,每一类的异步任务维护一个任务队列,而不是每一个任务都开一个线程(Volley表示我一个可以搞定这些全部 _(:з」∠)_)
这些常用的任务应该做好优先级处理(一般JSON数据优先于图片等静态数据的请求)
一般异步任务应该开启一个SingleAsyncTask,保证一时只有一个线程在工作
HTTP和图片下载尽量使用同一套网络请求
使用MVP模式规范大型Activity类的行为,避免异步任务造成的内存泄露

避免内存泄露

了解虚拟机内存回收机制
频繁GC也会造成卡顿,避免不必要的内存开销
错误的引用姿♂势造成的内存泄露(啊~要泄了~)
常见的Activity泄露(单例、Application、后台线程、无限动画、静态引用)
Bitmap泄露(HoneyComb这个问题之前压力好大)
尽量使用IntentService代替Service,前者会自动StopItself
排查内存泄露问题的方法(我一直以来都是简单暴力的人肉dump检查大法)
使用LeakCanary自动检查Activity泄露问题
对内存负载要保持敏感(Sharp)

视图优化

布局优化、减少层次,Include Merge
使用ViewStub避免不必要的LayoutInflate,使用GONE代替重复LayoutInflate同一个布局
避免过度绘制,应该减少不必要的布局背景;布局层次太深会造成过度绘制以及Measure、Layout等方法时间复杂度的指数增长
使用过渡动画,比如给图片的呈现加一个轻量的淡入效果会让视觉上变得流畅许多
避免过度的动画,不要让一个界面同时出现多出动画,比如List滚动时Item项要停止播放动画或者GIF
复杂动画使用SurfaceView或TextureView
尽量提供多套分辨率的图片,使用矢量图

Adapter优化

复用convertView,用ViewHolder代替频繁findViewById
不要重复setListener,要使用v.getId来复用Listener,不然会创建一堆Listener导致频繁GC
多布局要采用MutilItemView,而不是使用一个大布局然后动态控制需要现实的部分
不要在getView方法做做耗时的操作
快速滚动列表的时候,可以停止加载列表项的图片,停止列表项的动画,不要在这时候改变列表项的布局
尽量用RecyclerView(增量Notify和RecycledViewPool带你飞)

代码优化

算法优化,减少时间复杂度,参考一些经典的优化算法
尽量使用int,而不是float或者double
尽量采用基本类型,避免无必要的自动装箱和拆箱,浪费时间和空间
选用合适的集合类(尽量以空间换时间)、选用Android家的SparseArray,SparseBooleanArray和LongSparseArray
避免创建额外的对象(StringBuilder)
使用SO库完成一些比较独立的功能(高斯模糊)
预处理(提前操作)一些比较耗时的初始化工作统一放到启动图处理
懒加载(延迟处理)规避Activity的敏感生命周期
Log工具类,要在编译时删掉调试代码,而不是在运行时通过判断条件规避
优先使用静态方法、公有方法还是私有方法?速度区别很大哦
类内部直接对成员变量进行操作,不要使用getter/setter方法,调用方法耗额外的时间
给内部类访问的外部类成员变量要声明称包内可访问,而不是私有,不然编译的时候还是会自动创建用于访问外部类成员变量的方法
遍历集合时,使用i++代替Iterator,后者需要额外的对象操作,应在循环体内避免这种情况
如果一个基本类型或者String的值不会改变,尽量用final static,编译时会直接用变量的值替换变量,也就不需要在查询变量的值了

其他优化

数据库优化:使用索引、使用异步线程
网络优化 …… 一堆优秀的轮子
避免过度使用依赖注入框架,大量的反射
不过过度设计/抽象,多态看起来很有设计感,代价就是额外的代码、空间、时间
尽量不要开启多进程,进程的开销很大

APK瘦身

开启混淆
使用zipalign工具优化APK
适当有损图片压缩、使用矢量图
删除项目中冗余的资源,之前写过一些删除没有res资源的脚本
动态加载模块化,项目拆分啊!

性能问题的排查方法

GPU条形图,没事开来看看淘宝
过度绘制颜色,嗯,不要一篇姨妈红就好
LeakCanary,自动检测Activity泄露,挺好用的
TraceView(Device Monitor),Systrace,分析哪些代码占用的CPU时间太大,屡试不爽
Lint,检查不合理的res资源
layoutopt(还是optlayout?),对当前布局提出优化建议,已被lint替代,但是还能用
HierarchyViewer,查看手机当前界面的布局层次,布局优化时常用(只用于模拟器,真机上用要ROOT,不想ROOT加得使用ViewServer)
StrictMode,UI操作、网络操作等容易出现性能问题的地方,如果出现异常情况StrictMode会报警

android app技术亮点相关推荐

  1. Android APP热更新中的插件化(Hook技术:反射或动态代理),Demo (2)

    修改AAPT,资源分区,用于Android插件化- https://github.com/BaoBaoJianqiang/AAPT -- Android下的挂钩(hook)和代码注入(inject) ...

  2. 【APP渗透测试】 Android APP渗透测试技术实施以及工具使用(客户端服务端)

    文章目录 前言 一.安全威胁分析 二.主要风险项 三.Android测试思维导图 四.反编译工具 五.Android客户端 漏洞一.Jnaus漏洞 漏洞二.数据备份配置风险漏洞 漏洞三.Activit ...

  3. 开发一个android app需要的技术

    最近一直在忙着工作的事,很久没有更新博客了,今天突发奇想要把自己学到的android方面的知识记录下来,一方面是为了系统的回顾一下知识点自己的学习路线,另一方面希望能帮到更多初学的朋友.学习andro ...

  4. 开发Android app需要掌握的技术

    最近一直在忙着工作的事,很久没有更新博客了,今天突发奇想要把自己学到的android方面的知识记录下来,一方面是为了系统的回顾一下知识点自己的学习路线,另一方面希望能帮到更多初学的朋友.学习andro ...

  5. Android App 开发技术图谱

    Android App 开发技术图谱 转载请注明出处:www.leoyanblog.com 本文出自 LeoYan 的博客 本文同步发表于我的微信公众号,扫一扫文章底部的二维码或在微信搜索 LeoYa ...

  6. Android APP适配全面屏手机的技术要点-转载

    Android APP适配全面屏手机的技术要点  Windy_816 关注 2018.02.07 21:27* 字数 4010 阅读 5440评论 7喜欢 23 转载-来源 :https://www. ...

  7. 【技术分享】Android App常见安全问题演练分析系统-DIVA-Part1

    只有我看到DIVA的时候想到的是D.VA嘛?!滑稽脸 I. 什么是DIVA DIVA(Damn insecure and vulnerable App)是一个故意设计的存在很多漏洞的Android a ...

  8. 产品经理必了解的3个app技术框架

    在现在越来越多的app,你可以看到有一些app中是混着网页加载的(我们俗称的为H5)但要注意的web 前端开发是包含着h5的.web前端开发还包括了许多内容,比如说后台html,css,div等都是属 ...

  9. Android开发技术周报 Issue#102

    新闻 Android 7.1开发者预览版开放下载 Android 7.1新功能官方解析:四大亮点 开发者福音 稳定版Google Pixel Launcher开放下载 谷歌升级Android Pay安 ...

最新文章

  1. java设计模式中不属于创建型模式_23种设计模式第二篇:java工厂模式定义:工厂模式是 Java 中最常用的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式...
  2. Solidity语言
  3. python3 value查key的三种方法
  4. 360浏览器兼容模式下IE内核版本
  5. AutoML简要概述
  6. 中国大学单身 (民间)排行榜!你上榜了没
  7. 160. 相交链表 golang
  8. 千寻的计算机字符,转义字符变量与赋值
  9. thinkphp关联查询(多表查询)
  10. spring in action2笔记 第一章
  11. 验证手机号码的JS方法
  12. 手机型号大全_骁龙710手机推荐 骁龙710手机新品年度盘点:共12款
  13. 如何写毕业设计——开题报告
  14. Windows XP 按权限设置共享
  15. maven [INFO] No proxies configured [INFO] No proxy was configured, downloading directly
  16. 搭建机器人电控系统——通信协议——IIC通信原理及其实例(库函数+模拟IO口)
  17. 计算机组成原理实验箱D7,计算机组成原理与系统结构实验仪教学设备,上海求育...
  18. 台积电、高通“示好”华为:恢复供货?
  19. K近邻的MATLAB实现
  20. 鲁宾逊微积分教材版权的“知识共享”授权方式

热门文章

  1. idea android 真机,IntelliJ IDEA 如何用 真机 测试安卓(Android)App 实战移动端
  2. 光伏并网柜综合监测方案
  3. ANSVC无功补偿装置补偿无功,提高电能质量,降低用电成本
  4. Android面试复习汇总
  5. 朴实无华之特征选择方法总结
  6. ADB 的下载和安装
  7. [JavaScript][微信礼花][算法]JavaScript实现类似微信礼花算法(已实现封装)
  8. 微信小游戏用tensorflow.js人体姿势PoseNet控制
  9. 【HiveMQ 介绍】
  10. Simulink仿真报错奇点(singurlity)问题