![](/img/trans.png)
[英]What is called in place of onStop() if Activity is ended after onCreate() but before onStart()?
[英]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;
}
}
為什么即使在 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.