2010-08-15 58 views
3

這是我的第一篇..安卓:如何使用定時器

所以我學習的Android &的Java(從ActionScript來了),而我工作的一個項目,其中:

我嘗試單擊ImageView,讓ImageView交換圖像一秒鐘,然後返回到原始圖像。 (這是一個攻牙遊戲)

聽起來很容易,對不對?我花了整整一天的時間試圖讓一個標準的Java定時器/ TimerTask工作..沒有運氣..

有沒有更好的方法?我的意思是,有沒有Android特定的方式來做這樣的事情?如果不是,那麼理想的方式是什麼?

感謝您提前給予您的所有幫助! -g

+1

如果您發佈了一些您嘗試過的代碼片段,可能會有所幫助。 – MatrixFrog 2010-08-15 05:03:32

回答

7

這是我的Android定時器類應該很好。它每秒發送一個信號。更改schedule()調用是你想要一個不同的方案。

請注意,您不能在計時器線程中更改Android gui的東西,這隻允許在主線程中使用。這就是爲什麼你必須使用處理程序將控制權交給主線程。

import java.util.ArrayList; 
import java.util.List; 
import java.util.Timer; 
import java.util.TimerTask; 

import android.os.Handler; 
import android.os.Message; 

public class SystemTimerAndroid { 
    private final Timer clockTimer; 

    private class Task extends TimerTask { 
     public void run() { 
      timerHandler.sendEmptyMessage(0); 
     } 
    } 

    private final Handler timerHandler = new Handler() { 
     public void handleMessage (Message msg) { 
      // runs in context of the main thread 
      timerSignal(); 
     } 
    }; 

    private List<SystemTimerListener> clockListener = new ArrayList<SystemTimerListener>(); 

    public SystemTimerAndroid() { 
     clockTimer = new Timer(); 
     clockTimer.schedule(new Task(), 1000, 1000); 
    } 

    private void timerSignal() { 
     for(SystemTimerListener listener : clockListener) 
      listener.onSystemTimeSignal();  
    } 

    public void killTimer() { 
     clockTimer.cancel(); 
    } 

    @Override 
    public void addListener(SystemTimerListener listener) { 
     clockListener.add(listener);   
    } 
} 
+2

你真的在Android應用中測試過嗎? schwiz在下面發佈的鏈接指出:「當我移植應用程序以使用Android SDK時,此代碼實際上是在Eclipse中編譯的,但由於Timer()類在運行時不可用,因此導致運行時錯誤失敗。」我也無法獲得這在我自己的應用程序上工作;它只是不斷拋出一些錯誤。 – 2011-04-11 01:58:24