monkey的使用及与leakcanary结合测试内存泄漏并禁止点击状态栏音量键返回键
来源:互联网 发布:编写linux脚本执行命令 编辑:程序博客网 时间:2024/05/22 06:44
本文不以monkey和leakcanary的用法为主,要看它们用法百度一下大把的。本文要讲的是monkey使用的坑和与leakcanary结合以后的坑。
一、monkey的简单使用
新建一个whitelist的txt文档,里面写上包名
将这个文档导入手机的根目录下。
打开命令提示行,执行adb shell,然后执行命令。至于命令是什么意思,百度一下非常详细了。
monkey --pkg-whitelist-file /mnt/sdcard/whitelist.txt --throttle 200 --ignore-crashes --ignore-timeouts --ignore-security-exceptions --ignore-native-crashes --monitor-native-crashes -s 1000 -v -v -v 10000 1 >> /mnt/sdcard/Stability_base.txt 2 >> /mnt/sdcard/Stability_base_err.txt
在根目录下就可以看到跑monkey的日志了,跑完后发送到电脑上看最好。
关闭monkey的方法:adb shell->ps | grep monkey->kill pid(例如第二步看到的pid为15248,第三步输入kill 15248即可)。
二、leakcanary的使用
依赖
debugCompile 'com.squareup.leakcanary:leakcanary-android:1.5.1'releaseCompile 'com.squareup.leakcanary:leakcanary-android-no-op:1.5.1'
Application里初始化。源码是LeakCanary,我这里用的LeakCanaryWithoutDisplay。
if (!LeakCanaryWithoutDisplay.isInAnalyzerProcess(this)) {// This process is dedicated to LeakCanary for heap analysis.// You should not init your app in this process.LeakCanaryWithoutDisplay.install(this);}
运行我们的程序后会安装一个Leaks应用,我们的程序有内存泄漏会在通知栏弹出提示。
三、遇到的问题
1.monkey会自动打开状态栏,会播放音乐,打开和关闭wifi。
首先,手机要root,下载360的一键root即可。
Adb shell,如果是$,就输入su,变成#,再输入pm disable com.android.systemui,显示已经屏蔽系统ui,然后重启手机,可以输入reboot重启。第二条步骤也可以通过bat脚本,代码如下
@echo offclstitle 别忘了跑monkey啊:menuclscolor 0Aecho.echo 1.禁用systemui并重启echo.echo 2.启用systemui并重启echo.echo q.退出echo.:choset choice=set /p choice= 请选择:IF NOT "%choice%"=="" SET choice=%choice:~0,1%if /i "%choice%"=="1" goto disableif /i "%choice%"=="2" goto enableif /i "%choice%"=="Q" exitecho 选择无效,请重新输入echo.goto cho:disableadb shell "su -c" pm disable com.android.systemuiadb shell rebootpause&exit:enableadb shell "su -c" pm enable com.android.systemuiadb shell rebootpause&exit
2.屏蔽音量、返回等按键,在BaseActivity中加入如下代码,测试时打开,不测试时注释掉。
/**monkey 测试屏蔽按键*/@Overridepublic boolean onKeyDown(int keyCode, KeyEvent event) {switch(keyCode){case KeyEvent.KEYCODE_HOME:return true;case KeyEvent.KEYCODE_CALL:return true;case KeyEvent.KEYCODE_SYM: return true;case KeyEvent.KEYCODE_VOLUME_DOWN: return true;case KeyEvent.KEYCODE_VOLUME_UP: return true;case KeyEvent.KEYCODE_STAR: return true;case KeyEvent.KEYCODE_POWER: return true;}return super.onKeyDown(keyCode, event);}
2.屏蔽锁屏键、home键,这个真的不知道。谁知道的话麻烦告诉我。
3.monkey会自动打开leakcanary,会删除内存泄漏的记录。
新建一个包,命名为squareup.leakcanary,新建一个类,命名为LeakCanaryWithoutDisplay,把LeakCanary的代码直接复制过去。以5.1为例作修改。修改install方法
public static RefWatcher install(Application application) {RefWatcher refWatcher = ((AndroidRefWatcherBuilder) refWatcher(application).listenerServiceClass(DisplayLeakService.class).excludedRefs(AndroidExcludedRefs.createAppDefaults().build())).buildAndInstall();enableDisplayLeakActivity(application);return refWatcher;}
修改enableDisplayLeakActivity方法,实际上是把true改为了false,
public static void enableDisplayLeakActivity(Context context) {LeakCanaryInternals.setEnabled(context, DisplayLeakActivity.class, false);}
进源码里可以看到,最终调用了PackageManager的setComponentEnabledSetting方法,解释是,设置四大组件的enable状态,它将覆盖manifest里面可能已经设置了的状态。
public abstract void setComponentEnabledSetting(ComponentName componentName,int newState, int flags);
记住测试完后要打开enableDisplayLeakActivity,把false改为true。重新运行就看到leakcanary的界面了。
四、总结:事实上即使不需要检查内存泄漏我们也要跑monkey测试一下崩溃情况。之前也一直遇到状态栏和音量按键的问题,现在总算解决了。很遗憾的是锁屏按键还是没能解决,只能在它按掉锁屏后自己手动打开。
阅读全文
1 0
- monkey的使用及与leakcanary结合测试内存泄漏并禁止点击状态栏音量键返回键
- android Toolbar的使用结合状态栏与返回键
- 使用LeakCanary检测内存泄漏
- 内存泄漏的检测;leakCanary
- 检测内存泄漏——LeakCanary的使用
- 内存泄漏检测工具—LeakCanary的配置和使用
- LeakCanary (Android 检测内存泄漏工具的使用)
- Android常见内存泄漏和LeakCanary的使用
- LeakCanary开源项目(使用及原理github项目文档的翻译)使用LeakCanary检测安卓中的内存泄漏(实战)
- leakcanary原理分析与AppsFly内存泄漏
- 使用LeakCanary源代码检测内存泄漏
- 使用LeakCanary进行项目内存泄漏处理
- 安卓 内存 泄漏 工具 LeakCanary 使用
- 安卓 内存泄漏检测工具 LeakCanary 使用
- LeakCanary:检测所有的内存泄漏
- LeakCanary:简单粗暴的内存泄漏检测工具
- LeakCanary:简单粗暴的内存泄漏检测工具
- LeakCanary:检测所有的内存泄漏
- [Python]常用技巧之CSV处理
- 关于多指针指向同一块内存的问题!
- FTP默认模式搭建
- mysql5.7 索引
- 动态规划迷思
- monkey的使用及与leakcanary结合测试内存泄漏并禁止点击状态栏音量键返回键
- Genymotion下载慢或者下载失败的解决办法
- Unity3D粒子系统碰撞器,让粒子碰撞到物体之后消失
- tag()函数的基础使用
- 前端知识点汇总(html部分)
- Matlab使用PCA描绘多光谱图像
- FPGA学习笔记
- 序列化浅析
- mybatis思维导图,让mybatis不再难懂(一)