[英]error java.lang.RuntimeException: Unable to destroy activity IllegalStateException: Can not perform this action after onSaveInstanceState
[英]unable to destroy activity IllegalStateException
我已經在Android中創建MediaPlayer在服務上的媒體播放器。 我的主要活動有一個帶有單個項“ exit”的選項菜單,onOptionsItemSelected調用了另一個方法(mp是服務中的MediaPlayer的實例)
private void exitPlayer() {
PlayerService.mp.stop();
onDestroy();
}
並且onDestroy方法很簡單
protected void onDestroy() {
super.onDestroy();
if (!PlayerService.mp.isPlaying()) {
stopService(playerService);
cancelNotification();
finish();
}
}
但它拋出
java.lang.RuntimeException:無法銷毀活動java.lang.IllegalStateException
誰能幫我? 謝謝
而不是調用onDestroy(),請嘗試以下操作:
private void exitPlayer() {
PlayerService.mp.stop();
exitAll();
}
private void exitAll() {
if (!PlayerService.mp.isPlaying()) {
stopService(playerService);
cancelNotification();
finish();
}
finish()將破壞活動。 但是您不能確定onDestroy()會被調用! 系統可以隨時銷毀Activity,例如在內存不足的情況下,並且不會調用onDestroy()。
肯定會被調用的最后一個回調是onPause()。 因此,為了安全起見,將代碼移出onDestroy()即可。
哦,沒有這么愚蠢的錯誤,finish()會再次自我調用onDestroy(),所以我必須簡單地將代碼更改為:
private void exitPlayer() {
if(PlayerService.mp.isPlaying())
PlayerService.mp.stop();
finish();
}
protected void onDestroy() {
super.onDestroy();
if (!PlayerService.mp.isPlaying()) {
stopService(playerService);
cancelNotification();
}
}
這不是一個完美的方法,但是即使這不是一個好習慣,也可以避免IllegalStateException
。 (使用上述史蒂夫的解決方案)
因為至少要調用onDestroy()
。 (如該圖所示: 活動生命周期。 )
您的活動在那時或即將完成。 通過finish()
。
因此,要使用不帶IllegalStateException
onDestroy()
方法,您將必須這樣做:
protected void onDestroy() {
if (!PlayerService.mp.isPlaying()) {
stopService(playerService);
cancelNotification();
//finish();
}
super.onDestroy();
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.