如果在onRestart()之后调用onStart(),onCreate()在onStart()之前调用吗?

Is onCreate() called before onStart() if onStart() is called after onRestart()?

我不明白,当我恢复activity时,在onStop()方法中使用release()方法释放了MediaPlayerobj的资源,为什么可以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.