2013-04-22 116 views
1

我在重写了onDestroy方法后遇到了一些问题。 我的应用程序是一个音乐播放器,使用mediaplayer的实例,我需要在某些时候强制释放它,如果没有音乐播放。 这是到目前为止我的代码,为了使招我都overrided中,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是否为空也检查mp是否为空 – stinepike 2013-04-22 16:47:06

+1

tip super.onDestroy();必须是onDestroy中的第一条语句() – Raghunandan 2013-04-22 16:48:56

+0

我已经说了你的话,但问题仍然存在 – Pievis 2013-04-23 21:29:49

回答

3

super.onDestroy()必须是第一次调用onDestroy方法,如果您覆盖它。