2010-08-15 5 views
3

이 내 첫 번째 게시물입니다 .. 사용하는 방법 안드로이드 : 타이머

그래서 안드로이드 & 자바 (액션 스크립트에서 오는)를 배우고, 내가 프로젝트에서 일하고 있어요 :

I ImageView를 클릭하려고하면 ImageView 스왑 이미지가 잠시 표시되고 원본 이미지로 돌아갑니다. (이것은 두드리는 게임을위한 것입니다)

소리는 충분히 쉽지요? 나는 하루 종일 표준 Java Timer/TimerTask를 작동 시키려고 노력했다. 운이 없다 ..

더 좋은 방법은 없을까? 내 말은, 이런 식으로 할 수있는 Android의 특별한 방법이 있을까요? 그렇지 않다면 이상적인 방법은 무엇입니까?

선배 여러분의 도움에 감사드립니다! -g

+1

시도한 코드 스 니펫을 몇 개 게시하면 도움이 될 수 있습니다. – MatrixFrog

답변

7

여기 내 Android 타이머 클래스가 정상적으로 작동합니다. 매 초마다 신호를 보냅니다. 스케줄 변경() 호출은 다른 스키마를 원한다.

타이머 스레드에서 Android GUI 항목을 변경할 수 없습니다. 주 스레드에서만 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() 클래스를 사용할 수 없었기 때문에 런타임 오류가 발생했습니다. '또한 얻을 수 없었습니다. 내 자신의 응용 프로그램에서 작동; 그것은 단지 약간의 오류를 던지기 만했습니다. –