문제

나는 내 안드로이드 애플리케이션 중 하나에서 이상한 문제에 직면하고있다. 내 응용 프로그램은 별도의 스레드를 사용하여 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 메소드가 호출되지 않았습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top