Bardziej wydajny sposób na zatrzymanie pętli
Czy można przepisać ten kod, aby lepiej pracować z procesorem? Mam klasę, która wykonuje pewne zadania z poprawioną okresowością w osobnym wątku. Czasami proces ten można wstrzymać i wznowić. Obecnie używam flagi do wstrzymania, działa dobrze, ale pętla w ten sposób nadal ładuje procesor, gdy proces jest wstrzymany. Czy można to naprawić?
private boolean mIsCanceled = false;
private boolean mIsPaused = true; // TODO more efficient for processor way of pausing is required
private final Thread mTimerThread = new Thread(new Runnable() {
@Override
public void run() {
while(!mIsCanceled){
try {
Thread.sleep(UPDATE_PERIOD);
} catch (InterruptedException e) {
e.printStackTrace();
}
if (!mIsPaused){
doStep();
}
}
}
});
public MyClass(){
mTimerThread.start();
}
private void pause(){
mIsPaused = true;
}
private void resume(){
mIsPaused = false;
}
private void doStep(){
// Some code
}
Proszę podać alternatywną implementację mojego kodu.
P.S. Środowisko to Android OS 2.2+