• 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

  • 相关阅读:
    【LOJ】#2184. 「SDOI2015」星际战争
    【LOJ】#2181. 「SDOI2015」排序
    求解任意多边形的面积(平面内)
    认识基本的mfc控件
    .net学习之路——调试程序
    小白详细讲解快速幂--杭电oj2035-A^B
    模拟停车场问题
    初识mfc
    2034-人见人爱A-B(c++实现)
    3032-杨辉三角
  • 原文地址:https://www.cnblogs.com/zhangping/p/3571423.html
Copyright © 2020-2023  润新知