在 AsyncTask 中使用 System.currentTimeMillis() 記錄開始與結束時間,但在 onPostExecute 計算差值時總得到 0。
程式碼片段中未顯示完整類別結構,常見錯誤包括:
time 變數未正確宣告為成員變數,導致無法跨方法存取。AsyncTask 泛型參數宣告錯誤,影響生命週期方法執行。private class TestTask extends AsyncTask<Integer, Void, Boolean> {
private long startTime;
@Override
protected void onPreExecute() {
super.onPreExecute();
startTime = System.currentTimeMillis();
}
@Override
protected Boolean doInBackground(Integer... params) {
try { Thread.sleep(2000); } catch (Exception e) { e.printStackTrace(); }
return true;
}
@Override
protected void onPostExecute(Boolean result) {
super.onPostExecute(result);
long diff = System.currentTimeMillis() - startTime;
Log.d("TestTask", "耗時: " + diff + "ms");
}
}
extends AsyncTask<Params, Progress, Result> 泛型正確。startTime 宣告為類別成員變數,而非區域變數。onPreExecute 記錄時間,onPostExecute 計算差值。只要成員變數正確宣告且泛型簽名無誤,AsyncTask 計時完全可行。若仍異常,請檢查是否在背景執行緒中誤用 UI 方法。