안녕하세요, 여기 자바와 안드로이드로 며칠 있습니다. 나는이 "실행 가능한 구현"정확히 방법에 대해 조금 혼란 스러워요 실제로 예를 작동 : 내가 물어 당황"runpleable implements runnable"에 대해 혼란스러워합니다.
public class DrawableSurfaceView extends SurfaceView implements Runnable {
[...]
public void resume(){
isRunning = true;
mThread = new Thread(this);
mThread.start(); //start the animation
parseParameters(); //<== Here is my problem
}
public void run() {
while (isRunning == true){
if (!mHolder.getSurface().isValid()) {
continue;
}
Canvas canvas = mHolder.lockCanvas();
canvas.drawARGB(255, 0, 0, 0);
canvas.drawPath(PenPath, PenPaint);
canvas.drawPath(CursorPath, CursorPaint);
mHolder.unlockCanvasAndPost(canvas);
}
}
public void parseParameters() {
[...]
[ The rest of my code here modifying PenPath and CursorPath, etc ]
}
,하지만 난 그 mThread.start 후() 생각; run 메서드에서 루프를 실행하여 새 스레드가 시작됩니다. 대신에 내 parseParameters() 메소드가 종료 된 후에 만 실행되는 run 메소드가있다. 내가 원하는 것은 드로잉 루프 스레드에 캔버스를두고 드로잉 경로의 매개 변수를 외부에서 수정하여 애니메이션을 생성하는 것입니다. 이것은 매우 기본적인 것이라고 확신하지만 몇 시간 동안 이것을 이해할 수 없었습니다. 문서가 도움이되지 않습니다.
모든 포인터가 도움이 될 것입니다. 건배!
빠른 응답을 보내 주셔서 감사합니다. 스레드가 즉시 시작된다는 보장이 없다는 것을 깨달았습니다. 그래서 run() 메소드가 실행되고 부울이 바뀔 때까지 루프와 부울로 다른 메소드를 잠그려고했습니다. 그러나 Run() 메서드는 절대 실행되지 않으므로 루프가 무한히 진행됩니다. 멍청한 질문에 대해 유감스럽게도, 아직받지 못하고 있습니다. –
isRunning'volatile'을 시도해보고, 그 값을 어디에서 false로 변경합니까? 나는 당신의 코드에서 그것을 보지 못했습니다. – MByD
죄송합니다. 전 전체 코드를 복사하지 않았습니다. 휘발성으로 만들려고합니다. –