2012-09-17 81 views
0

我只是在Android的媒體播放器的測試,我開始在onCreate方法流和我有一個按鈕,調用完成()方法。點擊按鈕後,即使活動接近,我仍然可以聽到播放的流,但我想知道這是否是一種泄漏,我必須在調用finish()方法之前先停止播放器,或者finish()方法實際上並沒有完全殺死應用程序來釋放資源。感謝您閱讀媒體播放器和完成()方法

  public void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 
      setContentView(R.layout.activity_main); 
      Button add_function,exit_btn; 
      add_function = (Button) findViewById(R.id.view_chat); 
      exit_btn = (Button) findViewById(R.id.exit_btn); 


      MediaPlayer mp = new MediaPlayer(); 
      String URL_OF_FILE = "http://stream.radiosai.net:8002/"; 
    try { 
     mp.setDataSource(URL_OF_FILE); 
     mp.prepare(); 
    } catch (IllegalArgumentException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } catch (SecurityException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } catch (IllegalStateException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } catch (IOException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 

      mp.start(); 



     exit_btn.setOnClickListener(new View.OnClickListener() { 

      public void onClick(View v) { 
       // TODO Auto-generated method stub 
       finish(); 
      } 
     }); 
      }// EOF ONCREATE 
+0

請出示的代碼。你在哪裏聲明MediaPlayer實例? – Simon

+0

我將編輯我的主要職務包括這個 – kabuto178

回答

2

調用finish()不殺的應用程序,它只是破壞了你完成當前Activity。雖然我認爲在完成活動將停止MediaPlayer,你或許應該做在這種情況下是覆蓋onDestroy(),並釋放你的MediaPlayer對象那裏。例如:

@Override 
public void onDestroy() { 
    if(mediaPlayer != null) mediaPlayer.release(); 
    super.onDestroy(); 
} 
+1

我猜你應該調用父類的以前的onDestroy可能釋放的媒體播放器? – manavo

+0

也只是一個快速清理,這是一個有效的方法來做到這一點?或只是爲了幫助我的問題?它讓我感到驚訝,爲什麼這個活動關閉了,這個流還在繼續,這就是我問這個問題的原因。 – kabuto178

+1

@manavo可能是這樣,編輯來反映這一點。 :) kabuto178,高效?我的意思是沒有什麼*效率低下,但是你究竟是什麼意思?通常,如果你要釋放這樣的資源,你會做它在相應的結束事件(例如'的onCreate()'和'的onDestroy()','的onResume()'和'的onPause()') – kcoppock