一、常见的内存泄漏

对于较大规模的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主线程消息循环
  2. Android异步机制一:使用Thread+Handler实现非UI线程更新UI界面
  3. 《第一行代码--Android》读书笔记之多线程与服务
  4. Android中的多线程之handler
  5. Android中native进程内存泄露的调试技巧
  6. android - 为响应度而设计 - 开发文档翻译
  7. Android(安卓)Handler
  8. android 多任务多线程断点下载
  9. Android的网络应用 - 简单的C/S聊天室

随机推荐

  1. Android安全知识库
  2. android phone电话调用流程(转贴)
  3. android 开发 时间的计算问题
  4. Android(安卓)Studio——Message
  5. 【Android】win10操作系统下Android开发
  6. Android(安卓)Studio开发常见问题及解决
  7. Android App 结束运行后重启
  8. Androidx和Android(安卓)support库的冲突
  9. Android(安卓)可任意拖动的悬浮窗(类似悬
  10. 【Java】java和android网络编程 - 对byte