2013-04-22 4 views
1

onDestroy 메서드를 재정의 한 후 몇 가지 문제가 있습니다. 내 앱이 음악 플레이어입니다. mediaplayer 인스턴스를 사용하고 있습니다. 음악을 재생하지 않을 경우 어느 시점에서 강제로 해제해야합니다. 이 내 코드는 내가 모두 onKeyDown에() 및들의 OnDestroy를 오버라이드 한 트릭을 만들기 위해, 지금까지입니다() 메소드 :응용 프로그램을 닫은 후 onDestroy 충돌이 발생합니다.

@Override 
public boolean onKeyDown(int keyCode, KeyEvent event) { 
    if ((keyCode == KeyEvent.KEYCODE_BACK)) { 
     if(mp.isPlaying()) 
     { 
      //Genera la notifica 
      generateNotificationSong(); 
      //Muovi in background 
      moveTaskToBack(true); 
     } 
     else finish(); 

     return true; 
    } 

    return super.onKeyDown(keyCode, event); 
} 


//Faccio un override della funzione onDestroy per evitare che il mediaplayer continui 
//a mandare musica in background, inoltre l'UpdateTimeTask risulta inutile 
@Override 
public void onDestroy() 
{ 
     mNotify.cancel(001); 
     if(mHandler != null) 
      mHandler.removeCallbacks(mUpdateTimeTask); //rimuovo il thread che aggiorna la seekbar 
     if(mp != null) 
      mp.release(); //rilascio il media player 

     super.onDestroy(); 

} 

내가 응용 프로그램 단순히 뒤쪽을 눌러을 종료 할 때 지금, 그것 뿐이다 버튼을 누르면 앱은 onPause() onStop() 및 onDestroy() 메소드를 호출합니까? 어쨌든 가끔은 닫힌 후 4-5 초 동안 전화가 멈추고 "프로그램 응용 프로그램이 닫혔습니다"라는 메시지가 표시됩니다. 내가 여기 뭔가 잘못하고있는 것을 알고 있지만 무엇이 필요한지 모르겠다. 도움이 필요하다. 조언에 감사드립니다!

+0

mnotify가 null인지 확인하십시오. mp가 null 인지도 확인하십시오. – stinepike

+1

팁 super.onDestroy(); onDestroy()의 첫 번째 문이어야합니다 – Raghunandan

+0

당신이 말한 것을 만들었지 만 문제는 여전히 거기에 있습니다. – Pievis

답변

3

super.onDestroy()은 다시 정의한 경우 onDestroy 메서드의 첫 번째 호출이어야합니다.