Android性能优化---成为性能优化大师
该专题为博主学习时的记录笔记,性能优化是作为一个高级开发人员不可缺少的一项能力,学好性能优化,对个人的成长有很大帮助。
Kiven_Android
生活不是眼前的苟且, 还有诗和远方
展开
-
性能优化一之内存与垃圾回收器
从这篇文章开始,我们开始步入Android性能优化的篇章,由于博主最近正在学习当中,一方面当作自己记录笔记,另一方面分享给大家。首先我们需要去了解什么是内存回收机制: 某对象不再有任何的引用的时候才会进行回收。了解内存分配的几种策略:1.静态的静态的存储区:内存在程序编译的时候就已经分配好,这块的内存在程序整个运行期间都一直存原创 2016-12-08 21:07:56 · 1020 阅读 · 0 评论 -
性能优化二之内存泄漏
概要:内存泄漏在现在许多安卓程序员编码过程中是必然会遇到的问题,而它往往在程序员不经意间发生。其实这是跟一个程序员的编码习惯是息息相关的,优秀的程序员在开始编码的过程中就会不断的去优化自己的代码,时刻注意自己写的代码会不会发送内存泄漏,而一些普通的程序员仅仅是完成上级交给的任务,对自己的代码没有更高的要求。什么是内存泄漏?内存不在GC掌控之内了。当一个对象已经不需要再使用了,本原创 2016-12-07 22:46:05 · 577 阅读 · 0 评论 -
性能优化三之内存泄漏分析工具使用以及如何分析
这篇文章主要 分为四部分来具体讲解:1.HeapSnapShot使用2.HeapViewer使用3.MAT使用4.实际开发中怎么去运用上面三个工具来寻找可能发生内存泄漏的代码。第一部分:HeapSnapShot使用:Heap Snapshot能做什么?获取Java堆内存详细信息,可以分析出内存泄漏的问题1. 启动Heap Dump原创 2016-12-10 22:33:34 · 6810 阅读 · 0 评论 -
性能优化四之Allocation Tracker工具使用
Allocation Tracker(AS)工具比AllocationTracker(Eclipse)工具强大的地方是更炫酷,更清晰,但是能做的事情都是一样的。那它究竟是做什么的呢? Allocation Tracker是一种内存分配追踪器,可以辨别额外的内存膨胀,这是由于内存的历史浏览记录不断扩充产生的。选择一组仍在堆中的数据或者程序,这组数据堆中,在这个操作里,堆中数据叫作onCr原创 2016-12-09 18:03:25 · 4605 阅读 · 0 评论 -
性能优化五之LeakCanary使用
本文接着讲解如何去使用LeakCanary详细步骤:1.添加LeakCanary依赖包https://github.com/square/leakcanary在主模块app下的build.gradle下添加如下依赖: debugCompile'com.squareup.leakcanary:leakcanary-android:1.3.1' relea原创 2016-12-11 11:03:45 · 503 阅读 · 0 评论 -
性能优化六之Lint工具使用
前言:作为移动应用开发者,我们总希望发布的apk文件越小越好,不希望资源文件没有用到的图片资源也被打包进apk,不希望应用中使用了高于minSdk的api,也不希望AndroidManifest文件存在异常,Lint工具就能解决我们的这些问题。主要作用包括:检测资源文件是否有没有用到的资源。检测常见内存泄露安全问题SDK版本安全问题是否有废的代码没有用到代码的规范-原创 2016-12-11 18:38:15 · 440 阅读 · 0 评论 -
性能优化七之TraceView工具使用
TraceView工具能做什么?从代码层面分析性能问题,针对每个方法来分析,比如当我们发现我们的应用出现卡顿的时候,我们可以来分析出现卡顿时在方法的调用上有没有很耗时的操作,关注以下两个问题:调用次数不多,但是每一次执行都很耗时方法耗时不大,但是调用次数太多简单一点来说就是我们能找到频繁被调用的方法,也能找到执行非常耗时的方法,前者可能会造成Cpu频繁调用,手机发烫的问题,后者原创 2016-12-11 19:13:09 · 672 阅读 · 0 评论 -
性能优化八之内存抖动与计算性能优化
本篇的主题叫做内存抖动与计算性能优化,相信很多人都不清楚什么是内存抖动和计算性能优化。那接下来就开始介绍:什么是内存抖动? 之前我们解决了哪些讨厌的泄露,现在遇到了更大的问题,内存抖动。要知道,堆内存都有一定的大小,能容纳的数据是有限制的,当Java堆的大小太大时,垃圾收集会启动停止堆中不再应用的对象,来释放内存。现在,内存抖动这个术语可用于描述在极短时间内分配给对原创 2016-12-12 12:52:11 · 2188 阅读 · 0 评论 -
性能优化九之UI卡顿分析
在前一篇博客中提到内存抖动和耗时复杂的计算会导致UI卡顿。那为什么内存抖动会导致UI卡顿呢?其实在性能优化一之内存与垃圾回收器这篇文章中已经有所提及。这里来详细说明一下: 渲染功能是应用程序最普遍的功能,开发任何应用程序都是这样,一方面,设计师要求为用户展现可用性最高的超然体验,另一方面,那些华丽的图片和动画,并不是在所有的设备上都能流畅地运行。我们来了解原创 2016-12-12 17:12:49 · 4191 阅读 · 0 评论 -
性能优化十之UI卡顿之CPU与GPU优化
在上一篇博客当中具体讲解了为什么内存抖动和耗时的复杂计算会导致UI卡顿.其中还穿插了一些UI的渲染机制的知识。这篇博客将介绍对于渲染最重要的CPU与GPU如何去优化。具体的GPU与CPU的知识上篇博客中有很详细的讲解。 首先我们来看从GPU角度去优化: GPU主要是用来栅格化的,GPU通常出现的问题是过渡绘制那什么是过度绘制呢?如果我们曾经粉刷过房子原创 2016-12-22 21:57:17 · 2400 阅读 · 0 评论 -
性能优化十一之Hierarchy Viewer工具使用
上一篇博客说了要补充Hierarchy Viewer工具的使用,其实这个工具的使用方法相比前几个工具的使用要简单很多。1. 打开AndroidDevice Monitor2.切换视图3.打开需要监视进程4.分析布局总结: View Hierarcy 同时能帮助你识别渲染性能比较低的部分。View原创 2016-12-23 20:28:00 · 709 阅读 · 0 评论 -
性能优化十二之电量消耗的全过程分析
这次的博客带来了关于电量分析的相关知识,众所周知,目前网上关于电量分析的文章很少,也很少有把他讲的很细,今天就带大家来一起学习电量优化(博主自己最近也在学习) 当我们的设备忙着执行各种任务和各种复杂计算,秀自拍上传朋友圈图片、秀直播,设备硬件正在快速消耗电池电量来完成这些任务。很明显,你的任务处理的越复杂,电量就会消耗的越多和越快,一眨眼的功夫电量就消耗完了,用户的手机顿时变成个累赘原创 2016-12-27 22:22:55 · 1039 阅读 · 0 评论 -
性能优化十三之电量分析环境安装
上一篇博客给大家大体介绍了一下电量消耗的相关知识,这篇博客开始讲解如何利用Battery Historian工具来电量分析结果。注意:分析电量只针对Android5.0系统以上的app,5.0系统以下的app是无法进行分析的。环境部署:工具开源地址:https://github.com/google/battery-historian根据github上面介绍,Battery His原创 2017-01-09 23:34:38 · 1172 阅读 · 1 评论 -
性能优化十五之电量优化案例
前言 之前说了那么的电量优化理论,到现在自己都没有去做个小案例实践一下,这次博客的内容是根据实际的使用环境想出的一个小案例,方便自己去理解,电量优化该怎么用?问题抛出: 为了省电,有些工作可以放当手机插上电源的时候去做。往往这样的情况非常多。像这些不需要及时地和用户交互的操作可以放到后面处理。比如:360手机助手,当充上电的时候,才会自动清理手机垃圾,自动备份上传图片、联系人等到云端原创 2017-04-07 16:57:31 · 999 阅读 · 0 评论 -
性能优化十四之电量分析工具Battery Historian使用
上篇博客中并没有讲解BatterHistory该如何使用,这篇博客就开始给大家进行介绍。数据准备battery-historian工具需要使用bugreport中的BatteryHistory1. 先断开adb服务,然后开启adb服务adb kill-server 这一步很重要,因为当我们开发时做电量记录时会打开很多可能造成冲突的东西。为了保险起见我们重启adb。原创 2017-01-12 20:20:21 · 7181 阅读 · 2 评论 -
性能优化十六之Wake_Lock唤醒锁以及JobScheduler使用
前言 上一篇博客记录了电量优化中的第一种优化,把一些不需要及时和用户交互的一些操作,放到当用户插上电源的时候。根据自己目前的知识了解,只知道三种优化方式,第二种和第三种方式接下来进行介绍。第二种方式:网络类型选择优化 目前大部分手机都支持4G网络,殊不知蜂窝移动信号是在所有的网络类型中是最消耗电量的,很多人在使用手机的过程中,发现如果一直在使用4G移动网络,电量会持续不了多久就没原创 2017-04-14 20:57:05 · 13904 阅读 · 1 评论 -
性能优化十七之图片压缩优化
前言 Android开发中遇到最多的问题,遇到最多的问题,面试被问的最多的问题就是关于图片的处理,防止内存溢出等。博客中也转载了很多大牛写的关于如何加载大图的文章,写的也很好,这里不做过多介绍,这里就简单的谈下如何去使用系统的API进行压缩优化,相关的知识大牛都介绍了很多。这里做些关于图片加载优化的博客总结,想要学习相关图片压缩优化可以看以下博客: Android压缩图片到100K以原创 2017-04-17 20:50:26 · 692 阅读 · 0 评论 -
性能优化十八之多线程优化-AsyncTask源码分析
前言 做过安卓开发的没有人不知道AsyncTask类,它是一个处理异步任务极为强大的类,Andorid是个单线程模型的系统,但是为了提高UI的流畅度,也支持多线程操作,但前提是更新UI的线程必须是主线程,在子线程中无法更新UI,会抛出异常,而AsyncTask就是为此而生的。 AsyncTask内部封装的其实就是Thread+Handler,相信在没有AsyncTask之前原创 2017-04-25 14:21:02 · 601 阅读 · 0 评论 -
性能优化十九之多线程优化-HandlerThread、IntentService、Loader简介
前言 除了AsyncTask之外,Android还提供了其他的一些线程操作来方便开发者使用,接下来进行总结一、HandlerThread: HandlerThread是用来替代Thread的,本身HandlerThread就是继承Thread的,但是与Thread的区别在于,内部有一个Looper成员变量,通过Thread+Looper来实现,实际上就是HandlerTh原创 2017-04-25 17:24:42 · 719 阅读 · 0 评论 -
性能优化二十之数据传输效率优化-FlatBuffers
前言 数据传输效率优化对于很多人来说还是比较陌生的,我最近也正在学习相关的优化技术,在这里集广大网友的智慧来做一个总结。问题引入: 为什么要对数据的传输进行优化,相信百分之99的安卓开发工程师都是用的json进行数据的传输,利用Gson或者fastJson作为序列化及反序列化的工具,但是这样对时间和性能上是有些影响的,主要在内存的浪费和CPU计算机时间的占用,为什么会影响呢?原创 2017-04-27 00:08:58 · 2759 阅读 · 0 评论 -
性能优化二十一之安装包性能优化
前言 安装包性能优化为了减少应用程序安装包的大小,不仅仅可以降低用户的网络数据流量还减少了下载等待的时间。毋庸置疑,尽量减少程序安装包的大小是十分有必要的。通常来说,减少程序安装包的大小有两条规律:要么减少程序资源的大小,要么就是减少程序的代码量。下面从几个方面来介绍: 1、图片压缩: 图片:apk里面的资源图片,apk里的图片大小需要UI去进行压缩。原创 2017-05-02 13:04:13 · 909 阅读 · 0 评论 -
性能优化二十二之dex热修复原理
前言 热修复作为当下热门的技术,在业界内比较著名的有阿里巴巴的AndFix、Dexposed属于阿里系,腾讯QQ空间的超级补丁技术和微信的Tinker属于腾讯系。最近阿里百川推出的HotFix热修复服务就基于AndFix技术,定位于线上紧急BUG的即时修复,这两大系的主要区别在哪儿呢?阿里系着重从底层C的二进制入手(详细还没有去了解),而腾讯系的着重从Java的类加载机制入手。说到这里原创 2017-05-03 10:31:36 · 782 阅读 · 0 评论 -
性能优化二十三之Service进程防杀死
前言 Service作为四大组件之一很多安卓开发者对他肯定是又爱又恨,爱在它可以帮助我们去处理常驻后台的任务操作,比如说推送服务,心跳传输等,恨在当Servcie遇到360、腾讯管家之类的杀毒软件,变得脆弱,很容易被杀死,或者当用户手机锁屏会导致服务暂时停止运行。 我们常用的进程守护的套路无外乎以下几种:一、提高进程的优先级数值 对于Service被系原创 2017-05-03 17:22:29 · 1421 阅读 · 1 评论 -
性能优化二十四之应用启动速度优化
前言 应用启动速度在日常开发中也是影响用户体验最重要的一环,市场上很多的应用启动的时候可能都会花上3,4秒,其实这是很影响用户体验的,用户等不了那么长的时间去等待界面加载,用户就会难免会卸载该应用,造成损失。1、应用启动方式: 1)冷启动:当直接从桌面上直接启动,同时后台没有该进程的缓存,这个时候系统就需要重新创建一个新的进程并且分配各种资源。 2)热启动原创 2017-05-04 14:37:56 · 1950 阅读 · 0 评论