Android内存查看和debug

在探讨“Android内存查看与debug”这一主题时,我们深入剖析了如何在Android开发中有效管理内存,尤其是在遇到系统死机或OutOfMemoryError(OOM)等问题时。以下是从标题、描述、标签以及部分内容中提取的关键知识点,旨在帮助开发者更好地理解和处理Android应用中的内存问题。 ### Android内存管理概览 Android系统为每个应用分配了一个特定的内存空间,当应用消耗的内存超过这个限制时,系统会抛出OutOfMemoryError异常。对于32位设备,通常的限制是16MB,而64位设备则为24MB。但是,这并不意味着整个16MB或24MB都可供Java代码使用。事实上,这个空间被分为两部分:一部分用于原生代码(native),另一部分用于Dalvik虚拟机(Dalvik),后者运行Java代码。在默认情况下,大部分内存被分配给了原生层和Dalvik层,留给应用程序实际使用的Java堆空间要少得多。 ### 查看和调试Android内存 要检查应用的内存使用情况,可以使用多种方法。最常用的是通过命令行工具`adb shell dumpsys meminfo <package_name>`或`adb shell dumpsys meminfo <pid>`来获取应用的内存信息。这些命令提供了详细的内存使用情况,包括原生层、Dalvik层和其他部分的大小、已分配和空闲内存等数据。例如: ``` MEMINFO in pid 129 [com.android.launcher] nativedalvikothertotal size: 45723527 N/A 80990 allocated: 41132684 N/A 67971 free: 406843 N/A 12491 ... ``` 这些数据显示了不同内存区域的大小和状态,帮助开发者识别可能的内存泄漏或过度使用。 ### Bitmap的内存优化 Bitmap对象是内存消耗大户,特别是在处理高分辨率图像时。为了避免OOM错误,有几种策略可以采用: 1. **使用BitmapFactory.Options**: 在解码Bitmap之前,可以通过设置`inSampleSize`字段来减小Bitmap的尺寸,从而减少内存占用。 2. **Bitmap的回收**: 使用完Bitmap后,应调用`recycle()`方法来释放内存资源。 3. **懒加载与动态回收**: 对于大量图像的场景,可以实现懒加载机制,只在需要显示时加载图像,并在不使用时将其回收。 ### 异常处理与内存管理 在解码Bitmap时,应该使用try-catch块来捕获可能的OutOfMemoryError异常,避免程序崩溃。此外,合理设计和实现图像加载策略,如使用图片缓存和异步加载技术,可以显著降低内存消耗。 ### 结论 理解和管理Android应用的内存是确保应用性能和用户体验的关键。通过定期检查内存使用情况,优化Bitmap的处理方式,以及实施有效的异常处理策略,开发者可以避免常见的内存问题,提升应用的稳定性和响应速度。在实践中,应持续监控和调整内存管理策略,以适应不断变化的应用需求和用户行为。































view sourceprint?1 ERROR/AndroidRuntime(16350): java.lang.OutOfMemoryError: bitmap size exceeds VM budget
我们知道,android程序内存一般限制在16M,当然也有24M的,而android程序内存被分为2部分:native和dalvik,dalvik就是我们平常说的java堆,我们创建的对象是在这里面分配的,而bitmap是直接在native上分配的,对于内存的限制是 native+dalvik 不能超过最大限制。
用以下命令可以查看程序的内存使用情况:
view sourceprint?1 adb shell dumpsys meminfo $package_name or $pid //使用程序的包名或者进程id
用android自带的launcher程序为例:
view sourceprint?01 run: adb shell dumpsys meminfo com.android.launcher
02 <BR>results:
03 Applications Memory Usage (kB):
04 Uptime: 113017 Realtime: 113017
05
06 ** MEMINFO in pid 129 [com.android.launcher] **
07 native dalvik other total
08 size: 4572 3527 N/A 8099
09 allocated: 4113 2684 N/A 6797
11 (Pss): 1775 3572 3953 9300
12 (shared dirty): 1448 4020 4792 10260
13 (priv dirty): 1652 1308 708 3668
14
15 Objects
16 Views: 0 ViewRoots: 0
17 AppContexts: 0 Activities: 0
18 Assets: 5 AssetManagers: 5
19 Local Binders: 14 Proxy Binders: 21
20 Death Recipients: 0
21 OpenSSL Sockets: 0
22
23 SQL
24 heap: 64 memoryUsed: 64
剩余7页未读,继续阅读

- mimi0807262014-05-30安卓测试员必备啊

- 粉丝: 0
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助


最新资源
- 3D打印技术在建筑设计的应用.doc
- 蒸压加气混凝土砌块砌筑施工方案(宁海一期).doc
- 水与废水物化处理的原理与工艺绪论-secret.doc
- 重庆某住宅小区电气预留预埋施工方案.doc
- 人工智能ArtificialIntelligence【智能机器人】.ppt
- 工程师个人专业技术工作总结(中级职称).doc
- 人工智能产业发展态势研究.docx
- 助教录入工作培训.ppt
- [知名房企]采购和约与成本管理的精细化研究(图文并茂).ppt
- 第7章-建设工程施工合同管理(下).ppt
- 砌块体声屏障检查表.doc
- 计算机网络安全教程课后答案3.doc
- 成本科目与合约规划关系.doc
- 电力公司设施安全标示管理规定.doc
- 网络设备互联考试习题.doc
- 培训学校教师薪酬完整版.doc


