Android 内存检查

Android 内存检查

 

  本文简单介绍了如何使用 DDMS 和 MAT 工具来对 android 进行内存检查,了解 android 内存的具体占用情况。

 

步骤1. 使用 DDMS 观察内存的使用情况

  环境准备:电脑安装了 android sdk,手机端开启了 USB 调试开关, 将手机连接 PC。

  可以单独使用 ddms,或者在 android studio中Tools -> Android -> android device monitor, 选择待调试的 device 和进程。

ddms

 

步骤2. 内存使用异常时 dump hprof files

  正常情况下 allocated size 值都会稳定在一个有限的范围内,每次 GC 之后都会释放,如果发现 allocated size 一直增加没有得到释放,这说明内存占用存在问题,可能存在内存泄露。点击左侧的 dump java heap,导出 hprof 文件,假设命名为 test.hprof。

 

步骤3. 使用 MAT 分析 hprof 文件

(1)首先下载 MAT 工具,MAT 可以是 eclipse 插件,也可以下载一个独立的应用。

MAT 工具的下载地址:http://www.eclipse.org/mat/downloads.php

(2)步骤2中导出的 hprof 文件不能直接被 MAT 解析,需要转换一下:

cmd 进入 sdk\tools 目录,比如:cd E:\AutoTestProj\AutoTest\tools\android_sdk\tools;

(3)将步骤2中导出的 test.hprof 拷贝到该目录下;

(4)运行cmd:hprof-conv  test.hprof  output.hprof

则该目录下会生成 output.hprof 文件;

(5)MAT工具导入 hprof  文件

file -> open heap dump -> 选择 output.hprof,可以看到 leak suspects 分析报告。如果发现问题,需要及时和开发沟通解决。

heap

### Android Studio 如何检测内存泄漏 在 Android 开发中,内存泄漏是常见的问题,而 Android Studio 提供了强大的工具来帮助开发者检测和解决这些问题。以下是几种常用的方法和工具: #### 使用 Android Profiler Android Studio 3.0 及以上版本引入了 **Android Profiler**,这是一个内置的性能分析工具,可以实时监控应用的 CPU、内存、网络和能源使用情况。通过内存分析功能,开发者可以检测到内存泄漏的迹象。 - 打开 **Android Profiler**,选择设备和应用进程后,点击 **Memory** 面板。 - 在内存面板中,可以看到应用的内存使用情况,包括 Java 堆内存的使用。 - 点击 **Dump Java heap** 按钮,可以生成当前堆内存的快照。 - 通过分析快照中的对象,可以找到可能存在的内存泄漏。例如,如果某个 Activity 或 Fragment 的实例在不应该存在的时候仍然存在,可能是内存泄漏的迹象。 #### 使用 LeakCanary 插件 LeakCanary 是一个开源的内存泄漏检测库,专为 Android 设计。它可以自动检测应用中的内存泄漏,并在通知栏中显示提示信息。 - 在项目的 `build.gradle` 文件中添加 LeakCanary 的依赖: ```gradle dependencies { debugImplementation 'com.squareup.leakcanary:leakcanary-android:2.7' } ``` - 在 `Application` 类中初始化 LeakCanary: ```java public class MyApplication extends Application { @Override public void onCreate() { super.onCreate(); if (LeakCanary.isInAnalyzerProcess(this)) { // This process is dedicated to LeakCanary for heap analysis. // You should not init your app in this process. return; } LeakCanary.install(this); } } ``` - 运行应用后,LeakCanary 会自动检测内存泄漏,并在通知栏中显示提示信息。点击通知,可以查看详细的泄漏路径和原因。 #### 使用 MAT (Memory Analyzer Tool) MAT 是一个基于 Eclipse 的内存分析工具,能够与 Android Studio 配合使用,帮助开发者深入分析内存泄漏的原因。 - 在 Android Studio 中生成堆内存快照后,导出 `.hprof` 文件。 - 将 `.hprof` 文件导入到 MAT 中,使用 **Histogram** 或 **Dominator Tree** 功能分析内存使用情况。 - 通过查看对象的引用链,可以找到导致内存泄漏的具体原因。 #### 示例代码:检测内存泄漏的 Activity 以下是一个简单的示例代码,展示了如何通过 Android Profiler 检测内存泄漏的 Activity: ```java public class TestActivity extends AppCompatActivity { private static Context context; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_test); context = this; // 导致内存泄漏的静态引用 } @Override protected void onDestroy() { super.onDestroy(); context = null; // 解决内存泄漏 } } ``` 在上述代码中,`context` 是一个静态变量,指向了 `TestActivity` 的实例。如果不及时将其置为 `null`,可能会导致内存泄漏。通过 Android Profiler 或 LeakCanary,可以检测到这一问题。 #### 总结 通过 Android Studio 的内置工具(如 Android Profiler)和第三方库(如 LeakCanary),开发者可以有效地检测和解决内存泄漏问题。结合 MAT 工具,可以进一步深入分析内存泄漏的根本原因。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值