最近在帮助客户做gts测试遇到一个很奇怪的现象。
在gts测试过程中,先测试media后然后测试playerstore时,会一直失败。但是如果不放在media测试后面就不会出问题。
经过2天的检查和log分析,终于找到问题啦。在测试playstore 时遇到调用launcher,在执行media测试时,由于media测试用例在内存占用很大,由于系统的低内存的机制会将停在后台的进程杀死,因此launcher此时也被kill掉啦。导致在在playerstore测试时,需要回到主页时,
validateTop...: activity in front not resumed r=ActivityRecord{21ba5ee8 u0 com.android.launcher/com.android.launcher2.Launcher t1} state=DESTROYED
此时的主页已经是destroyed状态,导致返回主页失败。
解决方案: 1.减少系统的内置的apk,减少内存占用量。2.在launcher增加防杀机制,添加android:persistent="true
在解决此问题的过程中,重点研究了ActivityManagerh和ActivityThread 代码和使用一些内存分析的方法,现在归纳一下。
1.内存分析常见的参数:
- VSS - Virtual Set Size 虚拟耗用内存(包含共享库占用的内存)
- RSS - Resident Set Size 实际使用物理内存(包含共享库占用的内存)
- PSS - Proportional Set Size 实际使用的物理内存(比例分配共享库占用的内存)
- USS - Unique Set Size 进程独自占用的物理内存(不包含共享库占用的内存)
一般来说内存占用大小有如下规律:VSS >= RSS >= PSS >= USS
2.内存终端分析常用命令:
dumpsys meminfo ,cat /proc/meminfo ,procrank, “adb shell ps -x”
下面是procank 使用方式。
各个细节使用详细请参考:
http://blog.youkuaiyun.com/hudashi/article/details/7050897