2011-03-10 57 views
2

如何測量ListView/ListActivity渲染列表所需的時間?測量渲染ListView的時間ListView

我有一個ListActivity,需要很長時間才能顯示(在舊設備上它是〜3s),我想優化它。

編輯:

我已經有Activity1和Activity2之間的時間。在此期間,Activity2正在做一些事情(初始化)。除此之外,它呈現其列表。我想花點時間來完成這個列表。如果活動之間的總時間爲3秒,我想知道渲染列表是否需要2.9秒或0.5秒....

回答

3

您可以簡單地輸出時間。例如,你可以使用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語句不應該太大地增加代碼的計算。

+0

是的,但在什麼時候?有沒有像onStartRender/onStoprender? – zorglub76 2011-03-10 09:26:26

+0

我在之前的onPause和ListActivity的onResume之間存在差距。我不會把調試線放在適配器的getView中... – zorglub76 2011-03-10 09:32:39

+0

使用意圖在兩個活動之間發送t0。或使用我編輯的解決方案。有了這個,您幾乎可以在釋放代碼之前刪除調試消息,而無需太多麻煩。 – Darokthar 2011-03-10 11:07:39