使用场景:跟踪进程内存使用情况,看是否存在内存回收不了的问题,如果程序存在内存泄露问题,通过内存动态占用情况可以看出一些端倪。
² 查看系统dalvik给每一个进程分配的可用内存情况:
root@android:/ # getprop
[dalvik.vm.heapgrowthlimit]: [192m] :进程最大可分配到192m 如果哪个进程超过这个值就会发生OOM问题。
[dalvik.vm.heapmaxfree]: [8m]
[dalvik.vm.heapminfree]: [2m]
[dalvik.vm.heapsize]: [256m] :单个虚拟机可分配的最大内存=256m
[dalvik.vm.heapstartsize]: [8m]
² 查应用进程占用内存分布:
root@android:/ # dumpsys meminfo
² 查指定进程占用内存情况,比如电话进程
root@android:/ # dumpsys meminfo | grep phone
² 查指定几个进程占用内存情况,比如电话进程、电话本进程、信息进程
root@android:/ # dumpsys meminfo | grep -E "phone|mms|contacts"
内存泄露分析:
http://blog.csdn.net/rambomatrix/article/details/17485503
² 模拟发送广播:通过命令行执行adb shell am broadcast发送广播通。这个在调试的时候常用到。
adb shell am broadcast 后面的参数有:
[-a
[-d
[-t
[-c
[-e|--es
[--ez
[-e|--ei
[-n
[-f
例如:adb shell am broadcast -a com.android.test --es test_string "this is test string" --ei test_int 100 --ez test_boolean true说明:蓝色为key,红色为alue,分别为String类型,int类型,boolean类型
² Android AM命令行启动程序的方法
附上链接,感觉不是很常用到。
http://blog.csdn.net/sunrock/article/details/5675067
Debug 版本机器:
adb remount 重新挂载文件系统
adb pull .../Phone.apk g:/ 把Phone.apk从手机中取出来放到G盘。如果需要反编译别人机器的apk,可以这样取出来。
adb push .../Phone.apk system/app 把修改后的Phone.apk放入手机,放入以后需要让phone进程重启一次。
root@android:/ ps | grep phone 查找phone进程的pid
root@android:/ kill 1212 杀掉phone进程
USER版本机器:
使用 刷机精灵 ROOT,root成功率很高。
adb shell 进入shell
Su 获取Root权限
root@android:/# chmod -R 777 system/ 给指定目录赋予读写权限,然后可以更改这个目录 里面的文件。
² Adb logcat
Android日志系统为日志消息保持了多个循环缓冲区,而且不是所有的消息都被发送到默认缓冲区,要想查看这些附加的缓冲区,可以使用-b 选项,以下是可以指定的缓冲区:
radio — 查看包含在无线/电话相关的缓冲区消息
events — 查看事件相关的消息
main — 查看主缓冲区(默认缓冲区)
常用的打印方法有:
-v time 打印时间
-c 清理缓冲,在打印Log之前可以先执行一次清理,可以减少无效log。
-s LOG_TAG 打印指定的log tag对应的log
-f 文件名 将日志输出到文件
查看当前应用有多少个线程在跑,每个线程cpu使用情况如何。如果程序写的有问题,开启了一些线程在后台跑却从未释放,可能给程序带来严重的影响。
root@android:/ # top -t
可以看到电子邮件这个应用里面所有的线程使用cpu的情况。这个数据在分析一些cpu使用高的问题时很好用。
欢迎大家补充。