2012-09-17 4 views
0

나는 안드로이드에서 mediaplayer를 테스트하고 있었는데 onCreate 메서드로 스트림을 시작했고 finish() 메서드를 호출하는 버튼이 있습니다. 버튼을 클릭 한 후에도 활동이 가깝더라도 재생되는 스트림을들을 수 있습니다.이 유형의 누수인지 궁금하고 finish() 메소드를 호출하기 전에 먼저 플레이어를 중지해야합니다. 그렇지 않으면 finish() 메소드는 실제로 리소스를 확보하기 위해 앱을 완전히 죽이지는 않습니다. 응용 프로그램을 죽이지 않는 finish()를 호출Mediaplayer 및 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

을 읽어 주셔서 감사합니다, 그것은 단지 당신이 마무리하고 현재 Activity을 파괴합니다. 액티비티를 마치면 MediaPlayer이 중지 될 것이라고 생각하지만이 경우 수행해야 할 작업은 onDestroy()이며 더 이상 MediaPlayer 개체가 릴리스됩니다. 예 :

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

을 포함하도록 수정합니다. 부모의 onDestroy를 호출하기 전에 mediaPlayer를 공개해야한다고 생각하십니까? – manavo

+0

또한이 작업을 수행하는 효율적인 방법입니까? 아니면 내 문제를 돕기 위해? 그것은 내가 왜이 질문을했는지에 대한 이유뿐만 아니라 활동이 닫히고 스트림이 여전히 계속 가고있는 이유에 대해 저를 놀라게합니다. – kabuto178

+1

@manavo 아마 그것을 반영하기 위해 편집했습니다. :) kabuto178, 효율적입니까? 비효율적 인 것은 아무것도 없지만 정확히 무엇을 의미합니까? 일반적으로 이와 같은 리소스를 공개하려는 경우 해당 종료 이벤트 (예 : onCreate() 및 onDestroy(), onResume() 및 onPause())에서 수행합니다. – kcoppock