나는 앱이 포커스를 잃을 때 텍스처를 다시로드하는 데 약간의 시간이 걸리는 게임을하고 있습니다. 이 시간 동안 앱이 사용자에게 응답하지 않습니다.Android GL 컨텍스트가 다시로드되는 동안 ProgressDialog 표시
아래 그림과 같이 내가 텍스처가 나는 사용자가 응용 프로그램을 떠날 때 시작하는 것이 그것이해서 ProgressDialog를 숨길 수 있도록로드가 완료되면 주요 활동 클래스를 알려주는 핸들러 설정을 가지고 :
@Override
public void onWindowFocusChanged(final boolean hasWindowFocus) {
super.onWindowFocusChanged(hasWindowFocus);
if (hasWindowFocus) {
if (this.windowLocked && this.gamePaused) {
this.gamePaused = false;
Cocos2dxHelper.onResume();
this.mGLSurfaceView.onResume();
}
this.windowLocked = false;
} else {
this.windowLocked = true;
}
}
@Override
protected void onResume() {
super.onResume();
if (!this.windowLocked && this.gamePaused) {
this.gamePaused = false;
Cocos2dxHelper.onResume();
this.mGLSurfaceView.onResume();
}
if (!this.dialogShowing && this.gamePaused) {
displayResumingDialog();
}
}
@Override
protected void onPause() {
super.onPause();
this.gamePaused = true;
Cocos2dxHelper.onPause();
this.mGLSurfaceView.onPause();
}
기능을에 보여이 같은 대화보기 숨기기 : 사용자가 홈 버튼을 통해 응용 프로그램을 떠나 다음 앱 창을 열고 다시 아이콘을 클릭하여 돌아 오는 경우가 절대적으로 잘 작동
static public void displayResumingDialog() {
dialogShowing = true;
resumingDialog = ProgressDialog.show(sContext, "Re-Initializing", "Please Wait...", true);
}
static public void hideResumingDialog() {
if (resumingDialog != null && resumingDialog.isShowing()) {
resumingDialog.dismiss();
dialogShowing = false;
}
}
합니다. 그들이 화면을 잠그고 돌아 오거나 홈 버튼을 누르고 실행중인 앱 목록에서 돌아 오면 대화 상자가 숨겨지지 않습니다. 실제로 대화 상자를 제외한 모든 항목이 실행을 중지합니다. 외부에 닿았을 때 닫히도록 대화 상자를 설정하고이를 닫을 경우 뒤로 버튼을 누를 때까지 앱이 멈추게됩니다. 그런 다음 몇 초 후에 텍스처가 다시로드되고 게임이 시작됩니다.
나는 로깅에 대해 알아 내려고 노력했다. 화면이 잠겨있을 때를 제외하고는 onResume이 두 번 호출되는 경우를 제외하면 모든 호출이 동일하게 보입니다. 나는 내 코드가 그렇게 생각한다고 생각한다. 화면이 잠길 때 코드를 표시하지 않으면 코드가 아무 문제없이 끝까지 실행됩니다. 대화 상자를 위로 올리면 화면이 잠긴 상태에서 돌아오고 대화 상자가 표시되면 코드가 중지되므로 onSurfaceCreated가 호출되지 않고 텍스처가로드 될 기회가 없습니다. 내가 말했듯이, 대화 상자를 닫고 뒤로 버튼을 누를 때까지 다시 시작되지 않습니다.
ProgessDialog가 그와 같이 완전히 인계하게되는 원인은 무엇입니까? 아마도 더 중요한 것은, 잠긴 화면에서 돌아 오거나 앱 목록을 실행할 때 앱 아이콘을 클릭 할 때가 아니라 앱 아이콘을 실행하면 왜 그렇게할까요?