możesz użyć Thread ale to niepotrzebne komplikowanie i nie rozwiązuje pierwotnego problemu możesz użyć Timer-a ale najłatwiej jest to zrobić tak
klasa do odliczanie czasu:
public class Repeat implements Runnable {
private static enum Running {
YES, NO
}
public enum Unit {
MILLIS (1),
SECUND (1000),
MINUTE (60000);
private final int value;
Unit(int value) {
this.value = value;
}
public int value() {
return value;
}
}
private final Handler mHandler = new Handler();
private volatile Running mRunning = Running.NO;
private Repeat.execute mCallBack = null;
private int mCycleTime;
private int mEndTime;
private long mStartTime = 0;
public Repeat(Repeat.execute callBack) {
mCallBack = callBack;
}
public interface execute {
boolean onExecute(long runningTime);
void onFinish(long runningTime);
}
public boolean start(final int beginTime, final int cycleTime, final int endTime, final Unit unit) {
if (mRunning == Running.YES) {
return false;
}
mStartTime = System.currentTimeMillis() + beginTime * unit.value();
mCycleTime = cycleTime * unit.value();
mEndTime = endTime * unit.value();
if (mHandler.postDelayed(this, beginTime * unit.value())) {
mRunning = Running.YES;
return true;
}
return false;
}
public void stop() {
mRunning = Running.NO;
mHandler.removeCallbacks(this);
}
public boolean running() {
return mRunning == Running.YES;
}
public void run() {
if (mCallBack != null) {
long currentTime = System.currentTimeMillis() - mStartTime;
if (mRunning == Running.YES && (mCallBack.onExecute(currentTime) || currentTime < mEndTime)) {
mHandler.postDelayed(this, mCycleTime);
} else {
mCallBack.onFinish(currentTime);
}
}
}
}
sposób użycia:
public class Timer extends Activity implements Repeat.execute {
private Repeat repeatTask;
@Override
public void onCreate() {
super.onCreate();
repeatTask = new Repeat(this);
}
@Override
public void onDestroy() {
super.onDestroy();
if (repeatTask.running()) {
repeatTask.stop();
}
}
public boolean onExecute(long runningTime) {
co określoną ilość czasu wykonuje podając czas od początku
}
public void onFinish(long runningTime) {
//kiedy koniec odliczanie podaje ile działał stoper
}
}
timer uruchamia się poleceniem:
repeatTask.start(0, 1, 0, Unit.SECUND);
cykl co jedna sekunda, można ustawić co jedna milisekunda czy jedna sekunda
zatrzymanie tamiera polecenie:
repeatTask.stop();