0

Androidでメディアプレーヤーをテストしていたところ、onCreateメソッドでストリームを開始し、finish()メソッドを呼び出すボタンがあります。ボタンをクリックした後、アクティビティが閉じていてもストリームの再生が聞こえます。これは一種のリークであり、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
4

1 に答える 1

2

呼び出しfinish()はアプリケーションを強制終了するのではなく、Activity終了している現在を破壊するだけです。アクティビティを終了すると が停止すると思いますMediaPlayerが、この場合におそらく行うべきことは overrideであり、そこでオブジェクトonDestroy()を解放します。MediaPlayer例えば:

@Override
public void onDestroy() {
    if(mediaPlayer != null) mediaPlayer.release();
    super.onDestroy();
}
于 2012-09-17T15:12:56.077 に答える