如何測量ListView/ListActivity渲染列表所需的時間?測量渲染ListView的時間ListView
我有一個ListActivity,需要很長時間才能顯示(在舊設備上它是〜3s),我想優化它。
編輯:
我已經有Activity1和Activity2之間的時間。在此期間,Activity2正在做一些事情(初始化)。除此之外,它呈現其列表。我想花點時間來完成這個列表。如果活動之間的總時間爲3秒,我想知道渲染列表是否需要2.9秒或0.5秒....
如何測量ListView/ListActivity渲染列表所需的時間?測量渲染ListView的時間ListView
我有一個ListActivity,需要很長時間才能顯示(在舊設備上它是〜3s),我想優化它。
編輯:
我已經有Activity1和Activity2之間的時間。在此期間,Activity2正在做一些事情(初始化)。除此之外,它呈現其列表。我想花點時間來完成這個列表。如果活動之間的總時間爲3秒,我想知道渲染列表是否需要2.9秒或0.5秒....
您可以簡單地輸出時間。例如,你可以使用logcat
final long t0 = System.currentTimeMillis();
// code to measure
Log.w(TAG, "TEXT" + System.currentTimeMillis()-t0);
當然,你可以使用任何其他系統的輸出像對話框或東西。只需使用你喜歡的。
編輯:
如果你不想在你的代碼中使用調試消息,所有的時間,你可以做這樣的:
創建一個類中調用設置:
public class Settings {
public static final boolean DEBUG = true;
// If you prefer you could do use an enum
// enum debugLevel {SHOW_EVERYMESSAGE, ERRORS, IMPORTANT_MESSAGES, ...}
// In your classes you would have to check that DEBUG is less or equal than
// the debugLevel you want
}
在類要使用調試消息僅僅做到這一點
import xxx.yyy.Settings
class foo {
final static boolean DEBUG = Settings.DEBUG;
if(DEBUG){
// Debug messages
}
}
現在,如果您要禁用DEBUG消息,您可以在Settings類中簡單設置DEBUG = false
。
如果您想要在兩個活動之間進行測量,您可以使用intent並將t0發送給另一個活動以計算時間。當然,您可以在if(DEBUG){ /* code */ }
聲明中包含此內容,以免發送最終版本中的意圖。 if語句不應該太大地增加代碼的計算。
我不能說是否使用System.currentTimeMillis()
或System.nanoTime()
來提供更好的實現。儘管如此,你應該嘗試一下TimingLogger。看看這個article describing the usage of the TimingLogger helper class。
是的,但在什麼時候?有沒有像onStartRender/onStoprender? – zorglub76 2011-03-10 09:26:26
我在之前的onPause和ListActivity的onResume之間存在差距。我不會把調試線放在適配器的getView中... – zorglub76 2011-03-10 09:32:39
使用意圖在兩個活動之間發送t0。或使用我編輯的解決方案。有了這個,您幾乎可以在釋放代碼之前刪除調試消息,而無需太多麻煩。 – Darokthar 2011-03-10 11:07:39