android性能优化实战理论篇

本文地址:http://blog.csdn.net/iamws/article/details/51636175

第二篇:理论

         通过之前前篇介绍的工具,我们知道了应该怎么样去获取要分析的数据,但是也仅仅局限在于怎么样获取数据,而没有深入数据分析,这一篇主要讲解的是UI刷新这块部分android理论知识,有了这些知识后,对于上面的数据该怎么分析,你就胸有成竹了。

ps:本文只是个人理解后的总结,并不会深入源码层次分析,如有错误,还请麻烦各位帮忙指正~


这篇文章要解决的理论问题如下:

1、什么是内存泄漏,内存溢出,这块对性能有什么影响以及android GC的种类

2、网上说的android UI刷新是60fps/16ms一次是什么样的一回事

3、android的整体绘制原理

4、view动画和属性动画区别

5、过度绘制会导致什么问题

6、硬件加速制的时候你是否对画布使用了lockcanvas()方法

7、哪些操作是耗费CPU的

8、其他性能优化注意点(想到后再加上)


如果对以上知识已经了解的话,那就麻烦跳过这篇,期待下一篇实战举例吧(┬_┬)


好了,开始

第一:什么是内存泄漏,内存溢出,这块对性能有什么影响以及android GC的种类?

(这块需要对GC有一些了解,了解了java GC的这块知识后下面就很好理解了)

由于android是个移动设备上的操作系统,没有了PC上的硬件支持,所以对于系统cpu,内存资源都需要额外关注,这才是为什么要很注意性能问题;

内存泄漏:简单讲就是之前创建了对象,也分配了内存给它,但是后来这个对象没用了,本来应该要交给系统去回收,但是对象却由于一直被GC ROOT上存在引用链导致无法回收,然后这部分内存就一直被占用了,如果每次操作都会生成这个对象的话,将会逐渐吞噬app的内存剩余空间,最终结果就是导致内存被吃完了,然后抛出溢出异常


内存溢出:常称OOM,out of memory,一般玩图片加载不注意的时候很容易碰到这个异常,这个其实是一个app在任何android手机运行的时候,都会是 linux给fork出虚拟机(例如:dalvik)进程跑的,而每个虚拟机创建的时候就会给他当前系统规定的可使用内存大小,如果你的app某个操作导致要使用的内存超过了这个分配值,而且GC后剩余的内存都没办法给你足够的空间去分配,那么这个异常就出来了


android GC种类:我们在android的logcat中输入GC关键字,可以看到GC基本上有以下这几类:

GC_FOR_MALLOC: 表示准备在堆上分配内存时内存不够触发的GC

GC_CONCURRENT: 表示是在当前内存达到一定设置量后导致触发的GC

GC_BEFORE_OOM: 表示是在准备抛OOM异常之前进行GC

GC_EXPLICIT: 表示是程序中主动调用System.gc、VMRuntime.gc接口或者收到信号时触发的主动GC
ps:android GC相关的知识推荐可以看看老罗写的博客,友情链接:http://blog.csdn.net/luoshengyang/article/details/41822747


可以看到上面除了主动代码或者信号调用以外,其它的GC都是在内存分配过程中调用的,而GC过程是需要涉及到CPU计算的,同时GC过程分为挂起或者与其他线程并行两种模式,这时候大家就明白为

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值