Android内存泄露利器(hprof篇)

我们可以使用代码生成 hprof ,然后使用批处理hprof文件,然后用MAT进行对多个 hprof文件 比较分析。
一、批处理配置文件
批处理配置文件config.bat如下:
rem the following var is for getProcessState.bat
set rawDatadir=rawData
set processName=com.sec.android.app.dialertab;android.process.acore;com.sec.android.provider.logsprovider
rem set processShortName=a;b;c
set processShortName=
set outRoot=out
set statFilePrefix=stat
rem the following var is for getHprof.bat
set tools=D:\SDK\froyo\android-sdk-Dempsey-I997\tools
set hpInputFileDir=/sdcard
set hpInputFile=input.hprof
set hpRoot=hpTemp
注1:rawDatadir为“ps -x”提取出来的文件的目录
注2:processName需要统计RSS的进程的名字,可以同时统计多个,进程名之间用“;”进行分割。
注3:processShortName需要统计RSS的进程的名字的缩写形式,如果不坐设置或设置为空,这程序会根据processName自动生成。
注4:outRoot为对进程的RSS进行统计最后的生成文件的存放目录。
注5:outRoot为对进程的RSS进行统计最后的生成文件的前缀。
注6:tools为hprof-conv.exe所在的目录。
注7:hpInputFileDir为手机中我们生成的hprof文件所在的目录。
注8hpInputFileDir为 手机中我们生成的 hprof文件的名字。
二,需要使用的bat库
子目录lib用于存放bat库
需要的bat库: genSerial.bat getSubStr.bat
关于 genSerial.bat 请参看《 genSerial
关于 getSubStr.bat 请参看《 getSubStr
三,在代码中生成Hprof文件:
在android代码,可以使用如下代码把hprof文件生成到sd卡上。
Debug.dumpHprofData("/sdcard/input.hprof");
可以不用sd卡,而将hprof文件直接生成在手机上,但是只能在"/data/data/"+packageName的目录下。
实例1
    void generateHprof()
    {
String packageName=getApplicationInfo().packageName;
String hpFilePath="/data/data/"+packageName+"/input.hprof";
try {
//Debug.dumpHprofData("/sdcard/input.hprof");
Debug.dumpHprofData(hpFilePath);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
    }
四,在电脑上通过批处理取转换Hprof 文件
如果在程序中用 Debug.dumpHprofData("/sdcard/input.hprof") 的方式生成了 hprof文件
那么就可以执行文件getHprof .bat来取得 Hprof并转化为MemoryAnalyzer的格式。
getHprof.ba t文件如下:
@echo off
call config.bat
if exist %hpInputFile% (
del %hpInputFile% /q
)
adb pull %hpInputFileDir%/%hpInputFile% .
if not exist %hpInputFile% (
echo fail to pull %hpInputFile%
exit 1
)
if not exist %hpRoot% (
md %hpRoot%
)
Setlocal enabledelayedexpansion
set path=%path%;%cd%\lib
call genSerial
set serial=!genSerial~result!
set hpOutFile=%serial%.hprof
%tools%\hprof-conv.exe %hpInputFile% %hpRoot%\%hpOutFile%
echo success!
endlocal
注1需要在代码中先生成 hprof文件 ,而且config.bat中配置的路径要和 在代码中先生成 hprof文件的路径一致。
注2 如果需要连续多次以固定的时间提取 hprof文件 ,请参照《 Android内存泄露利器(全自动篇)
注意3 需要把bat库genSerial.bat,getSubStr.bat放在子目录lib中。
关于它们的更多内容请参考《 getSubStrgenSerial
关于更多的Android内存泄露利器请阅读《 Android内存泄露利器(RSS内存统计篇) 》,《 Android内存泄露利器(内存统计篇) 》,
  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值