首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 移动开发 > Android >

Android检测App的内存占用跟泄漏

2014-01-13 
Android检测App的内存占用和泄漏这次问题使我明白,别以为Android程序是基于Java 语言,有强大的垃圾回收机

Android检测App的内存占用和泄漏

这次问题使我明白,别以为Android程序是基于Java 语言,有强大的垃圾回收机制,就完全不用担心内存问题,其实Android程序也要特别小心你的内存,因为毕竟手机不比PC机,内存是极其有限的,在内存 不够的时候,系统随时会Kill掉你的程序。目前我所了解到的,容易发生内存问题的地方如下:

?

(1) 操作Bitmap对象,一定要注意,在不使用的时候 recycle

?

(2) 访问数据库,一定要记得关闭游标

?

(3) 涉及JNI层的代码,由于JNI层是采用C/C++编写,需要自己管理内存的分配/回收,所以要慎重小心。

?

那么,Android开发中,有什么有效的方法可以检测内存使用情况以及内存泄漏呢?

?

这里主要介绍三种方法:

?

1. 程序的Log信息

?

程序在进行垃圾回收的时候,会打印一条Log信息(logcat窗口),例如:

?

1adb shell dumpsys meminfo <package_name>


? ?其中,package_name 也可以换成程序的pid,pid可以通过 adb shell top | grep app_name 来查找,在命令行窗口运行上述命令,得到的我的 com.ticktick.test 程序的内存情况如下所示:

?

?

这里得到的信息非常多,重点关注如下几个字段:

?

(1) Native/Dalvik 的 Heap 信息

?

具体在上面的第一行和第二行,它分别给出的是JNI层和Java层的内存分配情况,如果发现这个值一直增长,则代表程序可能出现了内存泄漏。

?

(2) Total 的 PSS 信息

?

这个值就是你的应用真正占据的内存大小,通过这个信息,你可以轻松判别手机中哪些程序占内存比较大了。

?

4. ? 总结

?

关 于Android开发中内存的使用情况和内存泄漏的检测就简单介绍到这里,基本上用以上三种方式都能够定位内存泄漏问题,平时在使用Bitmap,数据库 和JNI层C/C++编程的时候,注意一点就行。另外,如果想深入了解文中的一些详细内容,可以参考Google官方提供的两篇文章,它们有着更详细的论 述《Investigating Your RAM Usage》,《Managing Your App Memory》,有任何疑问或者不清楚的地方,欢迎留言或者来信lujun.hust@gmail.com交流。

?

?

文章来自? http://www.soshow.org/html/73/n-52373.html

热点排行