Android 内存优化
一、内存机制:
C/C++:“谁污染,谁治理”。
java:请了一个专门的清洁工(GC)。
二、内存溢出为何会发生:
Android的虚拟机是基于寄存器的Dalvik,它的最大堆大小一般是16M,有的机器为24M。因此我们所能利用的内存空间是有限的。如果我们的内存占用超过了一定的水平就
会出现OutOfMemory的错误。
三、内存不够用的原因:
1、长期保持某些资源(如Context)的引用
2、保持了多个耗用内存过大的对象(如Bitmap)
四、解决内存溢出的方法
1、慎用static
static是Java中的一个关键字,当用它来修饰成员变量时,那么该变量就属于该类,而不是该类的实例。
所以用static修饰的变量,它的生命周期是很长的,如果用它来引用一些资源耗费过多的实例(Context的情况最多),这时就要谨慎对待了。
2、线程导致
线程也是导致内存泄露的一个重要的源头。主要原因在于线程生命周期的不可控。
3、慎用AsyncTask
Thread:只有在run函数不结束时会出现内存泄露
AsyncTask:内部的实现机制是运用了ThreadPoolExcutor,该类产生的Thread对象的生命周期是不确定的,是应用程序无法控制的。
因此如果AsyncTask作为Activity的内部类,就更容易出现内存泄露的问题。
这种线程导致的内存泄露问题应该如何解决呢?
(1)将线程的内部类,改为静态内部类。
(2)在线程内部采用弱引用保存Context引用。
4、注意并优化Bitmap
1.及时销毁recycle
2.设置一定的采样率
options.inSampleSize =
2;//图片宽高都为原来的二分之一,即图片为原来的四分之一
3.巧妙的运用软引用(SoftRefrence)
4.及时关闭Cursor
cursor.close();
5、图片尽量使用9path图片
6、Adapter要使用convertView或者ViewHolder
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。