Hallo,
ich verwende die Klasse UIUpdater (Code weiter unten). Ich will damit eine Einschaltverzögerung erreichen, wenn ich auf einen Button gedrückt habe. Das funktioniert an sich auch, nur dass dann auch alle weitere 5 Sekunden die run-Methode aufgerufen wird, obwohl ich beim ersten Mal durchlaufen der run-Methode "mUIUpdater.stopUpdates();" ausführe. Wenn ich den Stop Befehlt mit einem anderen Button ausführe, funktioniert es. Warum nicht innerhalb der run-Methode selbst?
Zeit starten:
// Initialize the release button with a listener that for click events
mSendButton = (Button) findViewById(R.id.buttonRelease);
mSendButton.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
//sendMessage("$R0200!");
mUIUpdater.startUpdates();
}
});
run-Methode:
UIUpdater mUIUpdater = new UIUpdater(new Runnable() {
@Override
public void run() {
// do stuff ...
if(cnt >= 1)
{
sendMessage("$R0100!");
mUIUpdater.stopUpdates();
cnt = 0;
}
else
{
cnt++;
}
}
});
Alles anzeigen
Klasse UIUpdater:
package com.example.android.BluetoothChat;
import android.os.Handler;
public class UIUpdater {
private Handler mHandler = new Handler();
private Runnable mStatusChecker;
private int UPDATE_INTERVAL = 5000;
/**
* Creates an UIUpdater object, that can be used to
* perform UIUpdates on a specified time interval.
*
* @param uiUpdater A runnable containing the update routine.
*/
public UIUpdater(final Runnable uiUpdater){
mStatusChecker = new Runnable() {
@Override
public void run() {
// Run the passed runnable
uiUpdater.run();
// Re-run it after the update interval
mHandler.postDelayed(this, UPDATE_INTERVAL);
}
};
}
/**
* The same as the default constructor, but specifying the
* intended update interval.
*
* @param uiUpdater A runnable containing the update routine.
* @param interval The interval over which the routine
* should run (milliseconds).
*/
public UIUpdater(Runnable uiUpdater, int interval){
this(uiUpdater);
UPDATE_INTERVAL = interval;
}
/**
* Starts the periodical update routine (mStatusChecker
* adds the callback to the handler).
*/
public void startUpdates(){
mStatusChecker.run();
}
/**
* Stops the periodical update routine from running,
* by removing the callback.
*/
public void stopUpdates(){
mHandler.removeCallbacks(mStatusChecker);
}
}
Alles anzeigen