2011-09-23 23 views
0

我正在從外部存儲器將mp4視頻加載到每個活動的videoview中。在第一項活動中,視頻是完美的,在第二項活動中,視頻是亂碼,然後在第三項活動中,視頻再次完美。在加載新活動之前,我需要以某種方式清理videoview嗎?在清晰的視頻之後,視頻始終顯示爲亂碼,並且在出現亂碼後視頻一直很清晰。android videoview在新活動中出現亂碼

我嘗試設置onpreparedlistener,然後在onprepared方法中啓動mediaplayer,但其他每個視頻仍然是亂碼。但是,當我在準備好的方法中斷時,以前活動的視頻仍然可見並且只在新視頻出現亂碼的情況下運行。當新活動將舊視頻曝光時,新視頻不會出現亂碼。

看起來像是視頻從前一個活動持續到每隔一段時間的新活動。我很困惑。

回答

2

我之前有過類似的問題 - 發生的情況是您的視頻在開始播放之前沒有完全緩衝或處於「就緒」狀態。查看MediaPlayer here的狀態圖。

This幾乎是你需要做的。

由於媒體播放器在播放內容之前一直播放內容,因此它將持續到下一個活動。這樣做:

@Override 
public void onDestroy() { 
    super.onDestroy(); 
    if (mediaPlayerInstance.isPlaying()) 
     mediaPlayerInstance.stop(); 
} 

這應該解決您的問題!

+0

謝謝,我添加了監聽器,但似乎這不是問題。我編輯了這個問題。 – Jays

+0

我也有同樣的問題:D!在onDestroy()調用你的mediaPlayer實例,並執行: 'if(mediaPlayerInstance.isPlaying())mediaPlayer.Instance.stop();' 這將阻止它播放或繼續下一個活動。 – digerati32

+0

我實際上需要調用重置。 stop()只是暫停視頻,因此它仍然在下一個活動中顯示,導致下一個視頻變成亂碼。此外,這不應該在onDestroy中完成,因爲只有在調用finish()或清除內存後才由系統調用它。即使您在開始新活動之前調用finish(),系統也會決定何時調用ondestroy,因此新視頻可能會在實際調用上一個活動的ondestroy之前嘗試加載。 – Jays

0

好吧我有它的工作。在開始新活動之前,我需要重置與videoview關聯的mediaPlayer。我想這意味着我的新活動使用了相同的視頻視圖,因此在新活動中使用了相同的媒體播放器。

雖然呼叫重置有效,但很難相信這就是我應該做的。它似乎像videoview的設計,所以我不必管理mediaplayer,因爲訪問mediaplayer的唯一方法是通過onPreparedListener ...