runnable を再利用することでガベージの作成を回避しようとしています。ただし、これを正しく実装する方法にこだわっています。
これが私の実行可能なラッパークラスです:
public class RotateRunnable implements Runnable {
Maze maze;
int i;
int steps;
int originalAngle;
int dir;
public RotateRunnable(Maze maze) {
this.maze = maze;
}
public void setRunnable(int i, int steps, int originalAngle, int dir) {
this.i = i;
this.steps = steps;
this.originalAngle = originalAngle;
this.dir = dir;
}
@Override
public void run() {
maze.setIsRotateRunning(true);
maze.setAngle(originalAngle + dir*(90*(i+1))/steps);
maze.rotateStep();
}
}
そして、ここに私がそれを実装した場所があります:
private void smoothAnimateRotate(final int i, final int steps, final int originalAngle, final int dir) {
// handler.postDelayed(new Runnable() {
// @Override
// public void run() {
// isRotateRunning = true;
// angle = originalAngle + dir*(90*(i+1))/steps;
// rotateStep();
// }
// }, 25 * (i));
rotateRunnable.setRunnable(i, steps, originalAngle, dir);
handler.postDelayed(rotateRunnable, 25 * i);
}
コメントアウトされたセクションは作業コードです。私が直面している問題は、呼び出されるrotateRunnable
前に内部の変数を設定することです。postDelay()
現時点ではrotateRunnable
、設定された最後の変数のみを実行する可能性が高いため、機能していません。これはsmoothAnimateRotate()
、変数を非常に迅速に更新する for ループ内で実行されるためです。
run
メソッドの変数部分を設定して、run
後で実行するときに正しく設定された変数で実行されるようにするにはどうすればよいですか?