我不明白当我在恢复活动时使用MediaPlayer方法中的release()方法释放onStop() obj的资源时,为什么在单击play按钮之后,MediaPlayer仍然可以播放声音,即使在onStop()方法中发布了obj,并且我确信调用了onStop()方法。那么,发生这种情况的原因可能是什么呢?onCreate()方法是在onRestart()方法调用onStart()方法时立即调用的,还是还有其他原因?
我的逻辑是,如果在onStop()方法中,我释放了MediaPlayer obj的资源,那么在obj中不应该有保存音频文件的实例,所以当活动恢复时,不应播放音频,因为在releaseMediaPlayerResources()方法中释放资源之后,将为obj分配一个空值,这就是为什么我认为obj要得到一个实例,必须调用onCreate(),因为在这个方法中,我已经为MediaPlayer obj分配了一个音频文件。
private MediaPlayer audio;
private Button playBtn;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main_list_view);
playBtn = findViewById(R.id.playBtn);
playBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
releaseMediaPlayerResources();
audio = MediaPlayer.create(this, R.raw.song);
audio.start();
}
});
}
@Override
protected void onStop() {
super.onStop();
releaseMediaPlayerResources();
Toast.makeText(this, "onStop() releasing res...", Toast.LENGTH_SHORT).show();
}
private void releaseMediaPlayerResources() {
if(audio!=null){
audio.release();
audio = null;
}
}发布于 2021-05-26 10:41:38
为什么即使在MediaPlayer ()方法中发布obj之后,在我单击play按钮之后,onStop仍然可以播放声音?
因为在每个按钮上单击,首先释放MediaPlayer,然后创建它的一个新实例并启动:
releaseMediaPlayerResources();
audio = MediaPlayer.create(YourActivity.this, R.raw.song);
audio.start();onCreate()方法是否在onRestart()方法调用onStart()方法时立即调用?
不是。
发布于 2021-05-26 10:40:04
指的是这个图像,当我想知道什么时候调用什么函数时,它总是帮助我?。

https://stackoverflow.com/questions/67703079
复制相似问题