如果在onRestart()之后调用onStart(),onCreate()在onStart()之前调用吗?
Is onCreate() called before onStart() if onStart() is called after onRestart()?
我不明白,当我恢复activity时,在onStop()
方法中使用release()
方法释放了MediaPlayer
obj的资源,为什么可以MediaPlayer
在我单击播放按钮后仍然播放声音,即使在 onStop()
方法中释放了 obj 并且我确定调用了 onStop()
方法。那么发生这种情况的原因可能是什么,是 onRestart()
方法调用 onStart()
方法后立即调用 onCreate()
方法还是有其他原因?
我的逻辑是,如果在 onStop()
方法中我释放 MediaPlayer
obj 的资源,那么在 obj 中不应该有包含音频文件的实例,所以当 activity 恢复时,不应播放音频,因为在释放资源后,obj 在 releaseMediaPlayerResources()
方法中被分配了一个 null 值,所以这就是为什么我认为 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;
}
}
参考这张图片,当我想知道什么时候调用什么函数时,它总是对我有帮助?
why can the MediaPlayer still play the sound after I click the play button even when the obj was released in the onStop() method?
因为在每个按钮上单击您首先释放 MediaPlayer
然后创建它的新实例并开始:
releaseMediaPlayerResources();
audio = MediaPlayer.create(YourActivity.this, R.raw.song);
audio.start();
is the onCreate() method called as soon as the onRestart() method calls the onStart() method?
No.
我不明白,当我恢复activity时,在onStop()
方法中使用release()
方法释放了MediaPlayer
obj的资源,为什么可以MediaPlayer
在我单击播放按钮后仍然播放声音,即使在 onStop()
方法中释放了 obj 并且我确定调用了 onStop()
方法。那么发生这种情况的原因可能是什么,是 onRestart()
方法调用 onStart()
方法后立即调用 onCreate()
方法还是有其他原因?
我的逻辑是,如果在 onStop()
方法中我释放 MediaPlayer
obj 的资源,那么在 obj 中不应该有包含音频文件的实例,所以当 activity 恢复时,不应播放音频,因为在释放资源后,obj 在 releaseMediaPlayerResources()
方法中被分配了一个 null 值,所以这就是为什么我认为 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;
}
}
参考这张图片,当我想知道什么时候调用什么函数时,它总是对我有帮助?
why can the MediaPlayer still play the sound after I click the play button even when the obj was released in the onStop() method?
因为在每个按钮上单击您首先释放 MediaPlayer
然后创建它的新实例并开始:
releaseMediaPlayerResources();
audio = MediaPlayer.create(YourActivity.this, R.raw.song);
audio.start();
is the onCreate() method called as soon as the onRestart() method calls the onStart() method?
No.