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

原文地址:https://www.cnblogs.com/zhangping/p/3571423.html