游戏行业认为adb是银弹的占比例不少,所以写了这个内容,其实应用很广泛,包含性能和兼容性自动化通用部分等等。本文,等你掌握了看闲置内存和运行内存呢的办法后,竞品测试也是一样的。
关于使用DDMS
线上基本没有源码,借助Android SDK中的DDMS工具,DDMS工具中Traceview的使用
点击"Tools"下拉选择"Android"-"Android Device Monitor",选择右上方DDMS
如果找不到手机,在dos下输入
adb devices
出现List of devices attached(不显示设备)
先确保连线问题,手机驱动还是usb调式模式,如果还是不行,重连手机,重启adb进程如下:
adb kill-server adb start-server
怕搞乱最好只链接1台手机。
查看闲置内存和运行内存
连接顺利后,先打开android的运行窗口,在上方可以查看内存和空闲内存
heapsize 当前内存堆
allocated 游戏app申请的内存
free 游戏app空闲内存
上面allocated+free = heapsize 和pc windows Stand by + free = Available 一样。
继续操作你的游戏,关注data object 注意count如果过大,记录下来,回头在pc版检查内存泄露
1-byte array 代表图片大小
App切换和周期
如果遇到手机启动放置2个app 在放置后台,当切换appA和appB,从A切换到B,cpu在计算appB,内存在进行缓存,会出现卡顿
先来讲讲切换的生命周期,了解Android API说明 Activity 继承了ApplicationContext这个类,范例如下:
public class Activity extends ApplicationContext { protected void onCreate(Bundle savedInstanceState); //savedInstanceState保存当时状态 protected void onStart(); protected void onRestart(); protected void onResume(); //刷新 protected void onPause(); protected void onStop(); protected void onDestroy(); //关闭程序 } |
我们先启动appA,通过Activity onCreate
public class ActivityTest extends Activity { private static final String TAG = "appA"; private static final String TAG = "appB"; public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //调用父类 setContentView(R.layout.main); Log.e(TAG, " onCreate"); } protected void onStart() { super.onStart(); Log.e(TAG, "start onStart"); } ...... |
查看DDMS logcat里也可以显示调用生命周期{time,pid,tag,message},在计算是切换时卡顿(手机),还是app刷新时卡顿。
切换app
A.onResume() -> A.onPause() -> B.onStart() -> B.onResume()