Android中用于检测时间相关的工具有TrackView很是强大,自己也写了一个简单的打印时间的类,可以用于一些简单的时间使用检测。
效果如下:
I/Stack (21850): ---------------------------------测试方法运行时间的调用 START ---------------------------------
I/Stack (21850): class name method name current time increased time
I/Stack (21850): com.jue.stack.MainActivity onCreate 2 2
I/Stack (21850): com.jue.stack.MainActivity onStart 10 8
I/Stack (21850): com.jue.stack.MainActivity onResume 15 5
I/Stack (21850): =================================测试方法运行时间的调用 END =================================
源码很简单:
package com.jue.stack;
import android.os.SystemClock;
import android.util.Log;
public class StackUtils {
public static String sTag = "Stack";
private static String sTitle = "unknow";
private static String startline = "---------------------------------";
private static String endline = "=================================";
private static long sStartTime = -1;
private static long sCurTime = -1;
private static long sLastTime = -1;
private StackUtils() {
}
public static void start(String title) {
clear();
init(title);
initHead();
}
public static void stop() {
StringBuilder sb = new StringBuilder();
sb.append(endline).append(sTitle).append(" END ").append(endline);
Log.i(sTag, sb.toString());
}
public static void clear() {
sTag = "Stack";
sTitle = "unknow";
sStartTime = -1;
sCurTime = -1;
sLastTime = -1;
}
private static void init(String title) {
sTitle = title;
sStartTime = SystemClock.elapsedRealtime();
sCurTime = 0;
sLastTime = 0;
}
private static void initHead() {
StringBuilder sb = new StringBuilder();
sb.append(startline).append(sTitle).append(" START ").append(startline);
String s = String.format("%-40s%-20s%-15s%-15s", "class name",
"method name", "current time", "increased time");
android.util.Log.i(sTag, sb.toString());
android.util.Log.i(sTag, s.toString());
}
public static void logs() {
StackTraceElement ste = new Throwable().getStackTrace()[1];
String methodName = ste.getMethodName();
String className = ste.getClassName();
String s = String.format("%-40s%-20s%-15s%-15s", className, methodName,
getCurTime(), getIncresedTime());
Log.i(sTag, s);
sLastTime = sCurTime;
}
private static Object getIncresedTime() {
return String.valueOf(sCurTime - sLastTime);
}
private static String getCurTime() {
sCurTime = SystemClock.elapsedRealtime() - sStartTime;
return String.valueOf(sCurTime);
}
}
调用类如下:
package com.jue.stack;
import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
StackUtils.start("测试方法运行时间的调用");
StackUtils.logs();
}
@Override
protected void onStart() {
super.onStart();
StackUtils.logs();
}
@Override
protected void onResume() {
super.onResume();
StackUtils.logs();
StackUtils.stop();
}
}