2013-04-22 3 views
1

У меня возникли проблемы после переопределения метода onDestroy. Мое приложение - музыкальный проигрыватель, используя экземпляр медиаплеера, который мне нужен в какой-то момент, чтобы заставить его освободить его, если музыка не воспроизводится. Это мой код до сих пор, для создания трюка я как перекрытого в OnKeyDown() и OnDestroy() метод:onDestroy crash после закрытия app

@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

A tip super.onDestroy(); должно быть первым утверждением в onDestroy() – Raghunandan

+0

Я сделал то, что вы сказали, но проблема все еще там – Pievis

ответ

3

super.onDestroy() должен быть первым вызовом метода onDestroy, если вы его переопределите.