首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

Android Studio TimerTask 編譯錯誤:new TimerTask1() 應為 new TimerTask() 匿名內部類寫法修正

     編輯:程式設計綜合問答

錯誤程式碼

mTimerTask = new TimerTask1();  // 錯誤:TimerTask1 非標準類別

編譯錯誤:Cannot resolve symbol 'TimerTask1'

正確寫法:匿名內部類實作 run()

mTimerTask = new TimerTask() {
    @Override
    public void run() {
        // 定時任務邏輯
        runOnUiThread(() -> {
            // 更新 UI
        });
    }
};

// 排程執行
Timer timer = new Timer();
timer.schedule(mTimerTask, 0, 1000); // 延遲 0ms,每 1000ms 執行一次

常見變體:Lambda 表達式 (Java 8+ / Android API 24+)

Timer timer = new Timer();
timer.scheduleAtFixedRate(new TimerTask() {
    @Override
    public void run() {
        // 邏輯
    }
}, 0, 1000);

注意:TimerTask 為抽象類,無法直接實例化,必須繼承並實作 run()。

進階替代方案:Handler + postDelayed (更適合 Android)

Handler handler = new Handler(Looper.getMainLooper());
Runnable task = new Runnable() {
    @Override
    public void run() {
        // UI 邏輯
        handler.postDelayed(this, 1000);
    }
};
handler.post(task); // 啟動

// 停止
handler.removeCallbacks(task);
  • 運行在主執行緒,直接更新 UI 無需 runOnUiThread。
  • 生命週期綁定 Activity/Fragment,onDestroy 移除回調防洩漏。

Kotlin 協程寫法 (現代首選)

lifecycleScope.launch {
    while (isActive) {
        // 邏輯
        delay(1000)
    }
}

總結

  1. 編譯錯誤直接原因:TimerTask1 不存在,應為 new TimerTask() { ... }。
  2. Android 開發優先考慮 Handler 或 Kotlin 協程,避免 Timer 執行緒池洩漏與 UI 執行緒切換煩瑣。
  3. 若必須用 Timer,記得 timer.cancel() 清理資源。

修正匿名內部類語法錯誤,並升級至現代 Android 非同步編程模式,讓定時任務更安全、更簡潔。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved