簡體   English   中英

如果在 onRestart() 之后調用 onStart(),是否在 onStart() 之前調用 onCreate()?

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

我不明白當我恢復活動時使用onStop()方法中的release()方法釋放MediaPlayer obj的資源時,為什么即使在obj是的情況下單擊播放按鈕后MediaPlayer仍然可以播放聲音在onStop()方法中發布,我確定調用了onStop()方法。 那么發生這種情況的原因可能是什么,是onCreate()方法在onRestart()方法調用onStart()方法后立即調用,還是有其他原因?

我的邏輯是,如果在onStop()方法中我釋放了MediaPlayer obj 的資源,那么 obj 中不應該有保存音頻文件的實例,因此當活動恢復時,不會播放音頻,因為 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;
    }
}

參考這張圖片,當我想知道什么時候調用 function 時,它總是對我有幫助?
Android 活動生命周期

為什么即使在 onStop() 方法中釋放了 obj 后,單擊播放按鈕后 MediaPlayer 仍然可以播放聲音?

因為在每個按鈕上單擊您首先釋放MediaPlayer然后創建它的一個新實例並開始:

releaseMediaPlayerResources();
audio = MediaPlayer.create(YourActivity.this, R.raw.song);
audio.start();

onCreate() 方法是否在 onRestart() 方法調用 onStart() 方法后立即調用?

沒有

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM