2012-02-03 89 views
0

首先,我使用了下面的onDestroy()方法,當我的應用程序關閉時進行操作。onDestroy()方法不起作用

@Override 
protected void onDestroy() 
{ 
    super.onDestroy(); 
    mediaPlayer.stop(); 
    mediaPlayer2.stop(); 
} 

但它會導致運行時錯誤。我使用onStop()方法來解決問題。但我想知道爲什麼onDestroy不起作用?你能解釋一下嗎?

@Override 
protected void onStop() 
{ 
    super.onStop(); 
    mediaPlayer.stop(); 
    mediaPlayer2.stop(); 
} 

我寫了我的代碼的一些變化,現在也沒有任何錯誤,當我 改變的onStop()用的onDestroy()我不明白它是如何工作的,但。

+0

這將有助於告訴我們你得到了什麼錯誤。 – 2012-02-03 16:13:16

+0

您可以發佈您從日誌中收到的錯誤嗎? – DRiFTy 2012-02-03 16:13:33

+0

當你說「我的應用程序已關閉」時,這是否意味着你點擊後退按鈕,直到完全退出你的應用程序,或僅當您剛剛點擊主頁按鈕時纔會發生這種情況? – hooked82 2012-02-03 16:16:28

回答

3

我的猜測是你的mediaPlayer變量在抵達onDestroy之前被清除(銷燬)。而你所看到的錯誤是一種空虛的錯覺。

你可以把你的東西放回的OnDestroy方法,並與您的媒體播放器做任何事情之前添加一個簡單的空測試:

@Override protected void onDestroy() { 
    super.onDestroy(); 

    if (mediaPlayer != null) { 
     mediaPlayer.stop(); 
     mediaPlayer2.stop(); 
    } 
} 
+0

?it it be null?我該如何阻止這種音樂? – 2012-02-03 16:20:48

+1

在代碼之前,您必須先停止它。但首先測試你是否仍然有使用這段代碼的錯誤。併發布你的錯誤!所以我們知道會發生什麼。 – Yahel 2012-02-03 16:26:40

2

重構代碼:

@Override 
protected void onDestroy() 
{ 
    mediaPlayer.stop(); 
    mediaPlayer2.stop(); 
    super.onDestroy(); 
} 

你首先摧毀對象,然後從中檢索數據,這是不可能的。 首先,檢索所有數據,然後致電super.onDestroy();

這應該解決。

+0

我試過了,但沒有奏效。 – 2012-02-03 16:19:45

+0

@faridmovsumov,顯示你正在收到的錯誤。如果它的空指針,那麼你確定mediaplayer的不是null。同時顯示您使用此更新的onDestroy()的onStop代碼。 – Tvd 2012-02-03 16:29:21

+0

@faridmovsumov,如果您有解決方案,請點擊任何最能幫助您的答案,並選擇「標記爲答案」。這將標誌着解決方案 - 別人會試圖幫助你,並浪費他們的時間。 – Tvd 2012-02-03 16:39:05

2

您是否嘗試過其他方式?

@Override 
protected void onDestroy() 
{ 
    mediaPlayer.stop(); 
    mediaPlayer2.stop(); 
    super.onDestroy(); //finally 
} 

我喜歡這個我的應用程序。我想你應該看看這些回調是如何工作的。

+0

是的,我做到了,但它沒有工作 – 2012-02-03 16:18:46

+0

好的。你可以粘貼堆棧跟蹤? – 2012-02-03 16:19:39