Android 系统性能优化

Android作为一种移动设备的操作系统,无法像PC机一样具有强大的内存和CPU,这就意味着,我们的Android应用程序无法无节制的使用内存和CPU资源。很多时候我们过多的使用这些资源时,会导致系统的卡顿或者程序ANR。常见的内存使用异常主要包括两种:内存溢出和内存泄露。内存溢出:指的是应用程序的内存使用量超出了系统分配的内存大小;内存泄露:指的是某个变量已经不再使用了,但是它还占用着内存,没有释放。对于这些,我们的Android系统肯定是容忍不了吧?

好吧,不废话了,来吧。

现在我将给大家介绍一些Android性能优化的方法和注意事项。比如布局优化、绘制优化、响应速度优化、Bitmap优化以及线程优化等等。

1、布局优化

布局优化的思想其实很简单,也就是减少view的层级。布局中的层级减少了也就是意味着系统在绘制view的时候消耗的内存小了,是不是啊大兄弟们?

我们在使用Layout的时候通常是这么三种:LinearLayout、RelativeLayout和FrameLayout,其实啊,当我们可以不使用RelativeLayout时就于要去使用它,因为它的内部实现要比其他两位大仙复杂的多,你可以去看源码。不过如果用来构造比较复杂的布局时,如果使用LinearLayout不得不使用多层级时,那你还是用RelativeLayout来解决吧,相信哥,虽然我不是传说。

还有一种优化方法就是如果可以的话你可以通过使用<include>、<merge>和ViewStub。<include>可以用来做布局的重用,<merge>通常和<include>配合使用,使用<merge>还能减少布局的层级哦,ViewStub通常是当使用该布局的时候才去加载,这样是不是会减少很多的内存消耗呢?使用例子我就不讲了,网上一大堆吧。

2、onDroaw()绘制

这个东西啊,其实我不是特别懂,在这里只是给一个提示性的建议。绘制优化我觉得主要体现在ondraw方法里边。

在ondraw里不适合加载布局,为啥呢,因为这个方法会调用很多次,我们去使用findViewById()方法时会消耗很多内存,更何况是加载一个布局呢。

在onDraw里不适合做耗时操作,你想啊,这个方法调用的频率这么高,咱还去做耗时操作!天理何在啊。

3、属性动画导致内存泄露

 啊,Android3.0之后给我们加入了属性动画的概念,具体关于属性动画和帧动画的比较可以自行Google,我这里只说一点,属性动画改变的是该view的属性,而帧动画改变的时候view的显示效果。举个例子哈,比如做一个转圈圈的属性动画,start()该动画之后,我们不去cancel()它,不管你的activity有没有退出,该动画依然存在!!只是你看不见而已,根据内存回收机制,你这个动画属于某个activity,这个动画没有cancel(),你说这个activity还会被回收吗!?

4、应用的响应速度

  额,一般来说,响应速度的核心思想就是在主线程中尽量的稍作耗时操作,嘿嘿,异步的形式去加载耗时操作。如果您老在activity主线程上做了好多耗时操作,那么你要悲剧了,手机屏幕要黑屏了,程序要ANR了。在,activity一般在5秒钟之内没有响应的话会ANR,广播在10s没有响应的话也会ANR。关键是,程序出现了ANR,我们很难找到具体位置!!嘿嘿,其实啊,人家谷歌大哥哥已经为我们考虑好了,如果您老的程序出现了ANR,则系统会在/data/anr/目录下创建一个文件,芳名:traces.text。啊,在这个文件里边你就可以看到ANR的具体位置了。

5、其他

  对了,Bitmap嘛,我们用它的时候主要是加载图片,这个你可以自己去看一下image-loader这个开源库,很好用的,这个bitmap的释放和缓存都不需要你自己去写了,直接拿来就用。还有线程嘛,如果你不嫌麻烦的话,您老可以使用线程池的方式去管理和使用线程。啊,对,还有一个ListView的优化,这个我就不说了,大伙儿都知道。

最后再加一句,service能不用就不用吧,这玩意儿内存消耗挺大的,不过,你可以使用IntentService,这个好处就是你不需要去管它什么时候销毁,只要任务执行完毕,它自己就把自己给销毁了,牛X吧?

当你想知道你写的代码消耗内存的情况是咋样的,那你就去使用MAT内存分析工具吧,我不是很熟悉,只是知道一点点。

啊,完事儿了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值