android app技术亮点
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技术亮点相关推荐
- Android APP热更新中的插件化(Hook技术:反射或动态代理),Demo (2)
修改AAPT,资源分区,用于Android插件化- https://github.com/BaoBaoJianqiang/AAPT -- Android下的挂钩(hook)和代码注入(inject) ...
- 【APP渗透测试】 Android APP渗透测试技术实施以及工具使用(客户端服务端)
文章目录 前言 一.安全威胁分析 二.主要风险项 三.Android测试思维导图 四.反编译工具 五.Android客户端 漏洞一.Jnaus漏洞 漏洞二.数据备份配置风险漏洞 漏洞三.Activit ...
- 开发一个android app需要的技术
最近一直在忙着工作的事,很久没有更新博客了,今天突发奇想要把自己学到的android方面的知识记录下来,一方面是为了系统的回顾一下知识点自己的学习路线,另一方面希望能帮到更多初学的朋友.学习andro ...
- 开发Android app需要掌握的技术
最近一直在忙着工作的事,很久没有更新博客了,今天突发奇想要把自己学到的android方面的知识记录下来,一方面是为了系统的回顾一下知识点自己的学习路线,另一方面希望能帮到更多初学的朋友.学习andro ...
- Android App 开发技术图谱
Android App 开发技术图谱 转载请注明出处:www.leoyanblog.com 本文出自 LeoYan 的博客 本文同步发表于我的微信公众号,扫一扫文章底部的二维码或在微信搜索 LeoYa ...
- Android APP适配全面屏手机的技术要点-转载
Android APP适配全面屏手机的技术要点 Windy_816 关注 2018.02.07 21:27* 字数 4010 阅读 5440评论 7喜欢 23 转载-来源 :https://www. ...
- 【技术分享】Android App常见安全问题演练分析系统-DIVA-Part1
只有我看到DIVA的时候想到的是D.VA嘛?!滑稽脸 I. 什么是DIVA DIVA(Damn insecure and vulnerable App)是一个故意设计的存在很多漏洞的Android a ...
- 产品经理必了解的3个app技术框架
在现在越来越多的app,你可以看到有一些app中是混着网页加载的(我们俗称的为H5)但要注意的web 前端开发是包含着h5的.web前端开发还包括了许多内容,比如说后台html,css,div等都是属 ...
- Android开发技术周报 Issue#102
新闻 Android 7.1开发者预览版开放下载 Android 7.1新功能官方解析:四大亮点 开发者福音 稳定版Google Pixel Launcher开放下载 谷歌升级Android Pay安 ...
最新文章
- java设计模式中不属于创建型模式_23种设计模式第二篇:java工厂模式定义:工厂模式是 Java 中最常用的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式...
- Solidity语言
- python3 value查key的三种方法
- 360浏览器兼容模式下IE内核版本
- AutoML简要概述
- 中国大学单身 (民间)排行榜!你上榜了没
- 160. 相交链表 golang
- 千寻的计算机字符,转义字符变量与赋值
- thinkphp关联查询(多表查询)
- spring in action2笔记 第一章
- 验证手机号码的JS方法
- 手机型号大全_骁龙710手机推荐 骁龙710手机新品年度盘点:共12款
- 如何写毕业设计——开题报告
- Windows XP 按权限设置共享
- maven [INFO] No proxies configured [INFO] No proxy was configured, downloading directly
- 搭建机器人电控系统——通信协议——IIC通信原理及其实例(库函数+模拟IO口)
- 计算机组成原理实验箱D7,计算机组成原理与系统结构实验仪教学设备,上海求育...
- 台积电、高通“示好”华为:恢复供货?
- K近邻的MATLAB实现
- 鲁宾逊微积分教材版权的“知识共享”授权方式
热门文章
- idea android 真机,IntelliJ IDEA 如何用 真机 测试安卓(Android)App 实战移动端
- 光伏并网柜综合监测方案
- ANSVC无功补偿装置补偿无功,提高电能质量,降低用电成本
- Android面试复习汇总
- 朴实无华之特征选择方法总结
- ADB 的下载和安装
- [JavaScript][微信礼花][算法]JavaScript实现类似微信礼花算法(已实现封装)
- 微信小游戏用tensorflow.js人体姿势PoseNet控制
- 【HiveMQ 介绍】
- Simulink仿真报错奇点(singurlity)问题