runnable을 재사용하여 가비지 생성을 피하려고합니다. 그러나이 올바르게 구현하는 방법에 붙어있다.handler.postDelayed()에 대한 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);
}
주석 처리 된 부분은 코드를 노력하고 있습니다. 내가 실행중인 문제는 postDelay()
이 호출되기 전에 변수를 rotateRunnable
안에 설정하는 것입니다. 지금은 작동하지 않습니다. rotateRunnable
은 설정된 마지막 변수 만 실행하는 것 같습니다. 이는 smoothAnimateRotate()
이 변수를 매우 빠르게 업데이트하는 for-loop 내에서 실행되기 때문입니다.
run
메서드의 변수 부분을 어떻게 설정하여 나중에 run
이 실행될 때 올바르게 설정 된 변수로 실행되도록합니까?