一、常见的内存泄漏

对于较大规模的Android应用开发,内存泄漏是个让人十分头痛的问题。一般来说,Android使用Java语言进行开发,通过GC进行内存回收。如果对象处于被引用的状态,那么GC是无法回收的。尤其是Android中Activity的Context,很容易在不易察觉的情况下被引用。Activity关闭的时候,引用该Context的对象还在使用中,致使Activity无法回收造成泄漏。而Context中有大量该Activity相关的信息以及资源,通常内存泄漏较大。

二、查看Activity是否有内存泄漏
Andorid在Eclipse中的DDMS插件比较适合用于查找内存泄漏问题。具体方法Google的SDK文档中都有介绍,简单说来就是:在DDMS中选择需要查看的进程,点击Update(绿色小桶),标签选择到Heap,点击Cause GC就能看到当前内存使用状况。注意观察data object一项,手机上不断打开关闭要测试的Activity,看该项是否不断上涨,如果不断上涨且Cause GC无法回到原来大小,则很可能是内存泄漏。

三、定位内存泄漏

Android中定位内存泄漏据我所知没有什么好的方法(如果有人知道请一定告诉我)。常用的方式是将部分代码注释掉一半,再查看DDMS内存状况,通过不断的二分法进行定位。

四、内存泄漏问题总结
(1)Android中OrientationEventListener,Enable之后,在onDestroy的时候必须Disable,否则泄漏。

(2)内存泄漏:多线程
在非UI线程(Worker Thread)中有时会用到this.wait()方法让线程进入等待状态。此时,如果Activity退出没有干涉它,那么该线程将一直处于等待状态,线程持有的对象将无法回收。所以,在Activity退出时,要notify等待的worker线程。如果线程中有长时间循环的话,要通过标志位等方法将循环结束。

更多相关文章

  1. Android LayoutInflater inflate方法效率
  2. Android中的多线程之handler
  3. 《第一行代码--Android》读书笔记之多线程与服务
  4. Android异步机制一:使用Thread+Handler实现非UI线程更新UI界面
  5. Android主线程消息循环
  6. 下载Android Sdk源码方法
  7. android 多任务多线程断点下载
  8. [Android]Thread线程入门3--多线程

随机推荐

  1. android的ndk修改app_platform的方法,亲测
  2. Android Retrofit实现上传头像(仿京东项
  3. Android(安卓)camera2使用
  4. Android一个Adapter的写法
  5. Android编译系统详解 配置文件
  6. Android Http请求框架一:Get 和 Post 请求
  7. android post get
  8. android 根据pid 获取进程名
  9. 常用网址
  10. Android MedaiPlayer类的简单介绍