无法找到正确释放MediaPlayer的地方

时间:2017-12-09 20:06:18

标签: android

我知道有很多关于MediaPlayer发布的问题,但是我搜索了几个小时,一切都相互矛盾。

简单的引用:我在MediaPlayer中创建了一个onCreate实例。我有一个播放和一个暂停按钮。在哪里发布MediaPlayeronPause / onStop导致恢复崩溃,因为onCreate不会一直被调用。 onDestroy似乎不可靠,因为它不会一直被调用。

那么发布MediaPlayer中创建的onCreate的位置在哪里?

public class MainActivity extends AppCompatActivity {
private MediaPlayer sound;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    sound = MediaPlayer.create(this, R.raw.song);
    Log.d("Media", "onCreate: MediaPlayer created");

    Button buttonPlay = findViewById(R.id.button_play);
    buttonPlay.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            sound.start();

        }
    });

    Button buttonPause = findViewById(R.id.button_pause);
    buttonPause.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            sound.pause();
        }
    });
}

@Override
protected void onDestroy() {
    super.onDestroy();
    sound.release();
    sound = null;
    Log.d("Media", "onDestroy: MediaPlayer released");
}
}

1 个答案:

答案 0 :(得分:1)

  

onDestroy似乎不可靠,因为它不会一直被称为

或者:

  • onDestroy()将被调用,或

  • 您的流程已终止,在这种情况下,当您的流程执行时,MediaPlayer会消失

  • 你有一个未处理的异常,在这种情况下你有更大的问题,或

  

那么在哪里可以发布在onCreate中创建的MediaPlayer?

onDestroy()