2011-04-06 4 views
5

뒤로 버튼을 누를 때마다 onPause()이 호출된다는 것은 분명히 잘못된 것이 었습니다. 이제 내 코드에서 나는이 onPause() 이벤트 넣어했습니다뒤로 버튼을 누르면 onPause가 호출되지 않습니까?

@Override 
protected void onPause(){ 
    super.onPause();   

    if(!_END_GAME){ 
     Builder _alert = new AlertDialog.Builder(this) 
     .setMessage("onPause, with game NOT over!"); 
     _alert.setNeutralButton("OK.", 
       new DialogInterface.OnClickListener() { 
      public void onClick(DialogInterface arg0, int arg1) { 
       arg0.dismiss(); // Kills the interface 
       System.runFinalizersOnExit(true); 
       finish(); 
      } 
     }); 
     _alert.setTitle("Your Score!"); 
     _alert.show(); 
    } 

을}

이제 문제는 대화는 코드 오류를 어떻게 - 그래서 - 지금까지 실행하고 있지 않습니다. onPause()가 호출 된 곳을 시각화하고 다른 변수 등을 디버깅 할 수 있도록 대화 상자를 배치했습니다. 그러나 나는 심지어 결코 나타나지 않는다고 말했다. 왜 이렇게 될지 모든 아이디어? 뒤로 버튼을 누를 때 onPause() 이전에 실행되는 기능이 있습니까? 정보를 미리 알려 주셔서 감사합니다.

+0

이 사실 활동에 onBackPressed 메소드를 오버라이드 (override)하는 것입니다 Fragment가 더 이상 보이지 않을 때 onPause()는 호출되지 않습니다! 나에게는 같은 문제가 있지만 다른 상황이있다. FragmentManager가 여전히 Fragments를 메모리에 유지할 수있는 것 같습니다. 사용자가 뒤로 버튼을 누르면 Fragment 세트 전체를 바꿔 이전 상태를 표시하면서 FM을 대체 할 수 있습니다. 이렇게하면 해당 단편에 대한 onPause, onStop 및 onDestroy 메소드가 모두 손실 될 수 있습니다. - 내가 실수 한거야? –

답변

2

으로 테스트하지 않고 onKeyDown을 무시하여 뒤로 버튼을 확인해야합니다. 은 액티비티가 일 때마다 호출됩니다. 포 그라운드에서 나가기; 꼭 마무리하는 것은 아닙니다. (이에 대해서는 isFinishing()을 확인할 수 있습니다.) 뒷면 키 처리에 대한 자세한 내용은 here을 참조하십시오.

+1

뒤로 버튼을 확인하지 마십시오. 그것은 끔찍한 해킹이며 많은 경우에 깨지기 쉽습니다. 활동을 배경 (들어오는 전화 통화, 홈 버튼 등)으로 가져 오는 수많은 다른 방법이 있습니다. – EboMike

+0

대단히 고마워, 나는이 길을 시작했고 내가 잘못 가고있는 곳을 빨리 깨달았다. 그래도 빠른 응답 주셔서 감사합니다!. –

+0

@EboMike - 백 버튼 확인과 해킹이 많은 경우가 왜 있습니까?Dianne Hackborn이 내가 언급 한 블로그 게시물에서 권장하는 전략입니다. 'onPause()'중에 이런 것들을 검사하는 것보다 훨씬 낫습니다. –

3

귀하의 활동이 더 이상 포 그라운드에 없을 때 항상 호출됩니다. 이는 보장됩니다. 어쩌면 당신의 _END_GAME가 틀리지 않을까요? onPause 메서드에 디버그 로그 출력을 추가하면 항상 호출된다는 것을 알 수 있습니다.

나는 onPause 중에 대화 상자를 표시하는 것이 매우 나쁜 형태이지만 사용자가 앱을 제거하려고 시도하고 있음을 유의해야합니다 (들어오는 전화 때문에 가능할 수도 있음). 대화 상자를 원하지 않습니다. 그것은 안드로이드 디자인에 반대된다.

사실 안드로이드 OS는 onDestroy 나 onPause에서 긴 속임수를 쓰려고 할 때 단순히 앱을 단락시킵니다. 기본적으로 그 사람들이 불려지면 조용히 사라져야합니다.

뒤로 버튼을 가로 채고 싶다면 Ted와 같은 버튼을 확인할 수 있지만 홈 버튼, 선택한 알림, 수신 전화 등 다양한 방법으로 앱을 백그라운드로 이동할 수 있습니다. 등

+0

예, 간단히 말하면 디버깅을했기 때문에 대화 상자를 최종 사용하지 않을 것입니다. –

2

등이 호출되며, 은입니다. 안드로이드가 앱을 끝내기 전에 잠깐 초조했습니다. 무슨 일이 일어나고 있는지보고 싶다면 로그 구문을 거기에 넣으십시오. 이 상황 곳을`:

당신은 뒤로 버튼 다음 가장 쉬운 방법 (안드로이드에서 작동을 2.1)을 누르면 대화 상자를 표시 할 경우

@Override 
public void onBackPressed() { 
    if (gameRunning) { 
     // show dialog 
    } else { 
     // exit 
     super.onBackPressed(); 
    } 
} 
관련 문제