学习区干货区Android实践

Android学习笔记20 性能优化与内存泄漏

2016-10-25  本文已影响408人  RumbleTsc

Android中的性能优化是一个非常重要的内容,本文主要是自己在Android性能优化方面的学习笔记,简单的同时重点介绍了性能优化方面一个比较重要的部分,内存泄漏。

一、性能优化
  1.布局优化
  2.内存优化
  3.其它优化
二、内存泄漏
三、相关工具
四、参考

一、性能优化

Android设备作为一种移动设备,不管是内存还是CPU都受到了一定的限制,无法做到像PC设备那样具有超大的内存和高性能的CPU,为了提高应用程序的性能,我们必须掌握常见的性能优化方法。

下面主要从几个方面对Android中的性能优化做简单的介绍。

布局优化

Android开发中一个很重要的部分就是布局的设计,一个好的交互界面必定会带来更好的用户体验,但是越复杂的界面往往越容易引起性能问题,我们需要做好布局优化。

Android中系统对View的测量、布局和绘制时,都是通过对View树的遍历来进行操作的,布局优化的思想主要是尽量减少布局文件的层级。我们在选择使用布局时,也要尽量合理地选用布局,比如使用RelativeLayout相对布局来避免LinearLayout的过度嵌套。

include可以重用布局

merge一般和include一起使用减少布局的层级

ViewStub可以按需加载所需的布局文件 更多详细介绍

内存优化

View的onDraw()方法要避免大量的操作,首先是onDraw()中不要创建新的局部对象,因为onDraw()方法可能会被频繁调用,这样会短时间内产生大量临时对象,降低程序执行效率,另外,onDraw()方法中不要做耗时任务。

在使用ListView控件的时候,需要考虑进行优化,首先是复用convertView,其次是利用静态内部类ViewHolder来避免findViewById每次都进行查找从而达到优化。当然,我们也可以直接使用谷歌最新推出的控件RecyclerView来替代ListView。

图片处理有关的Bitmap很占内存,在加载Bitmap时要尽量压缩,还要注意及时使用recycle()回收内存。

使用内存缓存或者磁盘缓存。

其它优化

开启新的线程执行耗时操作。但是,频繁地创建和销毁线程可能会带来较大的性能开销,这时可以考虑使用线程池技术来重用线程,以达到优化的目的。

性能优化是个比较大的范畴,更多优化方法还是需要我们在实践中多多探索。

二、内存泄漏

内存泄漏也称作“存储渗漏”,用动态存储分配函数动态开辟的空间,在使用完毕后未释放,结果导致一直占据该内存单元。直到程序结束。简单来说,就是该被释放的对象没有释放,一直被某个或某些实例所持有却不再被使用导致GC不能回收。

Android中内存泄漏可能主要有4个方面:

这种情况比较典型,例如某个类的静态变量引用了一个Activity,因为static静态变量的生命周期与应用的生命周期相同,那么将导致Activity无法释放。使用单例模式时如果不注意的话也会引起内存泄漏,需要注意。

在ListView或者GridView的使用时,构建Adapter时,如果不使用 convertView,而是每次都在getView()中重新实例化一个View对象的话,即浪费资源也浪费时间,也会使得内存占用越来越大。

Android中Bitmap对象往往比较占内存,当不再被使用的时候,可以调用Bitmap.recycle()方法回收此对象的像素所占用的内存。

资源性对象比如(Cursor,File文件等)往往都用了一些缓冲,我们在不使用的时候,应该及时关闭它们,以便它们的缓冲及时回收内存。它们的缓冲不仅存在于 java虚拟机内,还存在于java虚拟机外。如果我们仅仅是把它的引用设置为null,而不关闭它们,往往会造成内存泄漏。因为有些资源性对象,比如 SQLiteCursor(在析构函数finalize(),如果我们没有关闭它,它自己会调close()关闭),如果我们没有关闭它,系统在回收它时也会关闭它,但是这样的效率太低了。因此对于资源性对象在不使用的时候,应该调用它的close()函数,将其关闭掉,然后才置为null.在我们的程序退出时一定要确保我们的资源性对象已经关闭。

上面简单地列出了Android中内存泄漏的常见几种情况,下面是一篇最近看到的有关Java和Android中内存泄漏的文章,写的比较好。Java & Android 内存泄漏相关文章

三、相关工具

Android性能优化的工具

四、相关参考

1、十大技巧优化Android App性能
2、那些Android中的性能优化
3、Android性能优化——工具篇

上一篇下一篇

猜你喜欢

热点阅读