转自:https://testerhome.com/topics/579

首先说一下,在程序没有崩溃的时候如何抓取heap快照。
这个大家应该都知道,在ddms中自带此功能。

见上图
首先我们选中一个进程,然后点击 Update Heap按钮(小绿虫子旁边的按钮),这时就能看到heap使用情况
如果想取出快照详细分析,我们可以点击 Dump HPROF File按钮,保存到电脑上面。使用android-sdk/tools/hprof-conv这个工具把文件转换一下,之后用MAT分析即可。
Java代码 收藏代码
hprof-conv '/home/su1216/data.hprof' '/home/su1216/data_ok.hprof'

这时MAT能直接打开data_ok.hprof文件。

如果想要OOM时的内存快照该怎么办,我们总不能紧盯着手机的同时再盯着电脑,OOM出现的瞬间抓取内存快照,这显然是不现实的。
如果OOM并不经常复现,那么我们会错过很多修改bug的机会,浪费很多时间。

下面给大家一种抓取OOM时的heap快照的方法
由于OOM时的heap快照较大,所以抓取的内存快照我选择保存到sd卡中,因此要有写入外部存储的权限
Xml代码 收藏代码
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

然后我们需要实现UncaughtExceptionHandler这个接口
记得要设置未捕获异常的Handler,设置为自己。
当出现了异常的时候,uncaughtException方法会被调用,所以如果我们可以在这里抓取内存快照。
Java代码 收藏代码

import java.lang.Thread.UncaughtExceptionHandler;  import android.os.Debug; import android.os.Environment; import android.util.Log; public class CrashHandler implements UncaughtExceptionHandler { public static final String TAG = "CrashHandler"; private Thread.UncaughtExceptionHandler mDefaultHandler; private static final String OOM = "java.lang.OutOfMemoryError"; private static final String HPROF_FILE_PATH = Environment.getExternalStorageDirectory().getPath() + "/data.hprof"; private static CrashHandler sCrashHandler; private CrashHandler() {} public synchronized static CrashHandler getInstance() { if (sCrashHandler == null) { sCrashHandler = new CrashHandler(); } return sCrashHandler; } public void init() { mDefaultHandler = Thread.getDefaultUncaughtExceptionHandler(); Thread.setDefaultUncaughtExceptionHandler(this); } public static boolean isOOM(Throwable throwable){ Log.d(TAG, "getName:" + throwable.getClass().getName()); if(OOM.equals(throwable.getClass().getName())){ return true; }else{ Throwable cause = throwable.getCause(); if(cause != null){ return isOOM(cause); } return false; } } public void uncaughtException(Thread thread, Throwable throwable) { if(isOOM(throwable)){ try { Debug.dumpHprofData(HPROF_FILE_PATH); } catch (Exception e) { Log.e(TAG, "couldn’t dump hprof", e); } } if (mDefaultHandler != null) { mDefaultHandler.uncaughtException(thread, throwable); } else { android.os.Process.killProcess(android.os.

转载于:https://www.cnblogs.com/melody-emma/p/4913952.html

(转)OutOfMemory时抓取heap 快照相关推荐

  1. php抓取百度搜索百度快照,php抓取百度快照、百度收录、百度热词程序代码,抓取百度快照_PHP教程...

    php抓取百度快照.百度收录.百度热词程序代码,抓取百度快照 /* 抓取百度收录代码 */ function baidu($s){ $baidu="http://www.baidu.com/ ...

  2. 【Steam VR 2.X】unity Skeleton Poser 骨骼姿势 编辑好手势后 运行时 抓取姿势会偏

    问题描述: HTC vive,用skeleton poser为某个模型编辑好抓取姿势后,在Editor下看完全没问题,但一运行,抓取时,手的模型就会偏移到一个奇怪的位置,但姿势还是对的,就是偏移了. ...

  3. Windows上发生异常时抓取dump

    文章目录 正文 RaiseException函数 捕获大部分崩溃 - SetUnhandledExceptionFilter 那还有小部分呢? 为什么调试器可以抓到所有崩溃? CRT, C++ STL ...

  4. 代理php爬百度快照,php抓取百度快照、百度收录、百度热词程序代码

    $domain = "http://www.hzhuti.com/nokia/5230/ *欲查询的域名*/ $site_url = 'http://www.baidu.com/s?wd=s ...

  5. php采集百度推荐词,php抓取百度快照、百度收录、百度热词程序代码_PHP教程

    (.*)/"; /*用以匹配快照日期的字符串*/ $times = "/d{4}-d{1,2}-d{1,2}/"; /*匹配快照日期的正则表达式,如:2011-8-4*/ ...

  6. 使用Adplus抓取Dump小结

    Adplus抓取Dump有三种方式: 一种是Hang模式 adplus -hang -pn Prs.exe -o c:/dump -quit /2/当进程进程运行时生成dump 二是Crash模式 a ...

  7. 什么是网络爬虫?它是如何工作的以及如何自动抓取

    网络爬虫 是了解 Internet 工作原理的基本知识.如果打算将来进行网络营销或销售,或者进行网络数据相关工作的话,就一定要接触到网络爬虫. 文章目录 网络爬虫 什么是网络爬虫? 什么是网络爬虫机器 ...

  8. 爬虫Spider 05 - 代理参数-proxies | 控制台抓包 | requests.post() | 动态加载数据抓取-Ajax

    文章目录 Spider 04回顾 requests.get()参数 常见的反爬机制及处理方式 Spider 05笔记 代理参数-proxies **控制台抓包** **requests.post()参 ...

  9. 使用WinDbg抓取程序报错的Dump文件,例如抓取IE崩溃的Dump

     前几天分享了一个关于如何抓蓝屏Dump的帖子,今天再和大家分享一个使用WinDbg来抓取程序崩溃的Dump.有了Dump后,我们可以很迅速的解决问题,比如说IE崩溃,QQ崩溃,很多时候我们是一点 ...

最新文章

  1. C语言typedef和Windows数据类型
  2. c#中调用Excel
  3. 石器时代修改完以后服务器启动不了,石器时代 石器EE 突发问题“突发断连”服务器故障说明...
  4. android重启时间变成1970,Android时间戳转字符串的1970问题
  5. 北风设计模式课程---享元模式
  6. python循环指令_Python循环
  7. 零基础想学Python,明白这2点,越快年薪30W
  8. 复练-关于面试的科技树-能力三核的彩蛋
  9. 改变idetity的值
  10. HDU 4622 求解区间字符串中的不同子串的个数
  11. IDEA如何使用热部署方式启动项目?
  12. DeskClock选择闹钟声音时有重复选项
  13. 基于单片机的智能数字电子秤设计
  14. java 输出_java输入输出小结
  15. Axure RP9入门介绍----小白
  16. 一款非常强大的vlc多媒体视频播放器:VLC Media Player for mac
  17. 企业微信开发实战(三、OA审批之回调通知、获取审批单号、审批详情)
  18. Google Code Jam 2010 Qualification Round 资格赛 Problem A. Snapper Chain 问题A.按扣链条
  19. 谷歌chrome浏览器怎么导出打包扩展程序crx
  20. 小米拒绝权限_小米手机 MIUI 12 测试新隐私保护:可设置每个应用是否允许访问相册和信息存储目录...

热门文章

  1. 虚拟机实现java线程_深入理解java虚拟机(23):java与多线程
  2. idea 光标 快捷键_IntelliJ Idea 常用快捷键
  3. Python数据结构与算法(附录)——块状链表的动态调整
  4. jdbc教程_JDBC教程
  5. Java ArrayList的Array,Array的ArrayList
  6. amqp rabbitmq_Spring AMQP RabbitMQ示例
  7. jsf面试题_JSF面试问答
  8. node js 非阻塞io_Node Express JS:套接字IO模块示例
  9. scala编程_Scala编程语言简介
  10. scala案例_Scala案例类和案例对象深入(第2部分)