在开发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这样的方法中,使用方法一。

更多相关文章

  1. 浅谈Java中Collections.sort对List排序的两种方法
  2. Python list sort方法的具体使用
  3. python list.sort()根据多个关键字排序的方法实现
  4. android上一些方法的区别和用法的注意事项
  5. android实现字体闪烁动画的方法
  6. Android中dispatchDraw分析
  7. Android四大基本组件介绍与生命周期
  8. Android(安卓)MediaPlayer 常用方法介绍
  9. 在Fragment中设置控件点击方法,执行失败。

随机推荐

  1. Android设置一个按钮右对齐
  2. android:imeOptions指定了弹出键盘时右下
  3. android 应用程序数据共享shareuserid篇+
  4. android java代码的启动:app_process
  5. Android(安卓)SDK安装教程
  6. Android消息机制(native层)
  7. Google 将 Android(安卓)4.0.4 源代码送
  8. Android(安卓)LinearLayout的android:lay
  9. android字体大小的设置
  10. Android布局文件的属性值解析