zoukankan      html  css  js  c++  java
  • Android应用程序内存优化

          在开发Android App的过程中,经常会遇到内存方面的压力,比如OOM,或者频繁GC。

          本文不打算涵盖内存优化的所有方面,只是介绍一下我自己遇到的问题和解决方法。

          1.确定频繁分配内存的代码路径。

             一般来说,频繁分配内存的路径可能会是绘制(draw)相关的方法,排版(layout)相关的方法,某些回调方法(特别是传感器回调方法)。

             你可能会检查这部分代码,然后优化它。但是,内存分配可能发生在调用链的更下面,检查代码非常困难。

             这里推荐一个工具,DDMS下的Allocation Tracker。它可以显示出程序运行中频繁分配内存的部分,并准确定位到对应的代码。

          2.减少频繁的内存分配。

             虽然Java是自动回收内存的,但是频繁的内存分配肯定会增加GC方面的压力,导致程序运行不流畅。

             减少频繁地创建对象或者不在这些地方创建对象是一个显而易见的方法。

             但是,也有一些比较隐秘的内存消耗点,下面就介绍一下for循环的内存消耗。

             我们知道,在Java中,for循环有两种写法:

    List<String> list = new ArrayList<String>();
    
    // 写法一
    for(int i = 0; i < list.size(); i++) {
          String s = list.get(i);
          ......
    }
    
    // 写法二
    for(String s : list) {
          ......
    }

             写法二是Java推荐的方法,但是它却需要分配一个迭代器对象。如果是放在onDraw这样的方法中,那么每次调用就需要分配一小块内存。

             所以,我推荐在onDraw这样的方法中,使用方法一。

  • 相关阅读:
    超过5名学生的课
    大的国家
    shell启动时读取的配置文件
    shell中的环境变量
    chisel中pviews命令无法使用
    shell script中的$*和$@
    OS X EI Capitan 10.11.4中sudo无法起作用的解决方法
    如何判断CPU的位数
    block中无法使用C数组变量
    布尔代数
  • 原文地址:https://www.cnblogs.com/frydsh/p/2810601.html
Copyright © 2011-2022 走看看