Android onpause는 해고되지 않습니다
문제
나는 내 안드로이드 애플리케이션 중 하나에서 이상한 문제에 직면하고있다. 내 응용 프로그램은 별도의 스레드를 사용하여 SurfaceView에서 끌어냅니다. 응용 프로그램이 일시 중지되면 렌더링 스레드가 중지됩니다. 응용 프로그램의 onpause 메소드에서 스레드의 종료를 처리하고 있습니다. 응용 프로그램으로 다시 시작한 후 렌더링 스레드의 새 인스턴스가 응용 프로그램 OnResume 메서드에서 다시 작성됩니다.
응용 프로그램을 한 번 일시 중지 할 때 전체적으로 작동합니다. 그러나 두 번째 시간을 시도 할 때 내 활동의 onpause 메소드가 호출되지 않습니다. 응용 프로그램이 더 이상 표시되지 않더라도 렌더링 스레드가 백그라운드에서 실행됩니다.
홈 버튼을 사용하고있는 활동을 일시 중지합니다. 수명주기를 이해 한 한, 이것은 onpause를 유발해야하며 나중에 onstop이어야합니다. 처음이 일을하는 것은 완벽하게 작동하지만 두 번째 시간이 지되는지 궁금합니다.
여기에 내 onpause 메소드의 몇 가지 코드가 있습니다.
@Override
public void onPause() {
Log.v(null, "calling onpause");
gameview.getHolder().removeCallback(this);
gameview.setFocusable(false);
gameview.setOnTouchListener(null);
if (!isInitializing) {
thread.skipPause = false;
thread.setRunning(false);
boolean retry=true;
while (retry) {
try {
thread.join();
retry = false;
} catch (InterruptedException e) {
}
}
thread=null;
} else {
shouldBePaused = true;
}
super.onPause();
}
.
여기에서 내 onresume 방법이 있습니다 :
@Override
public void onResume() {
gameview.getHolder().addCallback(this);
gameview.setFocusable(true);
gameview.setOnTouchListener(this);
thread = new MainThread(gameview.getHolder(), this);
super.onResume();
}
.
궁금해하는 질문은 홈 버튼을 누르지 만 onpause가 호출되지 않는 이유입니다. 어쩌면 나는 실이 잘못된 방식으로 실을 재현할까요? 어떤 도움이 감사 할 것입니다.
해결책
나는 문제를 해결했다.문제는 injoin-method가 SurfaceView의 캔버스를 릴리스하기 전에 렌더링 스레드를 완료한다는 것입니다.
나는이 방식으로 캔버스가 활동을 사라진 후에도 잠겨있었습니다.아마도이 이유로 onstop 메소드가 호출되지 않았습니다.