2013-08-02 1 views
1

나는 앱이 포커스를 잃을 때 텍스처를 다시로드하는 데 약간의 시간이 걸리는 게임을하고 있습니다. 이 시간 동안 앱이 사용자에게 응답하지 않습니다.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가 그와 같이 완전히 인계하게되는 원인은 무엇입니까? 아마도 더 중요한 것은, 잠긴 화면에서 돌아 오거나 앱 목록을 실행할 때 앱 아이콘을 클릭 할 때가 아니라 앱 아이콘을 실행하면 왜 그렇게할까요?

답변

1

글쎄, 나는 내 자신의 질문에 답하는 것을 싫어하지만 문제를 알아내어 다른 사람에게 도움이 될 것이라고 생각했다. 대화 상자가 생성되면 포커스가 들어 오므로 onWindowFocusChanged 코드가 호출되지 않으므로 텍스처가 다시로드되지 않습니다. 그래서처럼, 내 대화 상자가 포커스를하지하여 그것을 고정 : 대화 상자 잠금 비록

resumingDialog.getWindow().addFlags(WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE); 

을 최대 UI의 나머지 부분과 잠금 화면에서 사용자가 반환 이상이있을 경우. UI의 나머지 부분이 잠긴 상태에서 스핀을 얻기 위해 대화 상자를 asynctask에 표시하려고 시도했지만 행운은 없습니다. 누군가 대화 상자를 회전시키는 방법을 말해 줄 수 있다면 그 사람에게 답을주게되어 기쁩니다. 앱이 실행중인 앱 목록이나 앱 아이콘을 통해 앱으로 돌아 오면 화면이 잠겨 있지 않은 상태에서 돌아갑니다.