如果使用時mediaplayer的狀態不正確則會引發illegalstateexception異常。
idle 狀態:當使用new()方法建立乙個mediaplayer物件或者呼叫了其reset()方法時,該mediaplayer物件處於idle狀態。這兩種方法的乙個重要差別就是:如果在這個狀態下呼叫了getduration()等方法(相當於呼叫時機不正確),通過reset()方法進入idle狀態的話會觸發onerrorlistener.onerror(),並且mediaplayer會進入error狀態;如果是新建立的mediaplayer物件,則並不會觸發onerror(),也不會進入error狀態。
preparing 狀態:這個狀態比較好理解,主要是和prepareasync()配合,如果非同步準備完成,會觸發onpreparedlistener.onprepared(),進而進入prepared狀態。
error狀態:如果由於某種原因mediaplayer出現了錯誤,會觸發onerrorlistener.onerror()事件,此時mediaplayer即進入error狀態,及時捕捉並妥善處理這些錯誤是很重要的,可以幫助我們及時釋放相關的軟硬體資源,也可以改善使用者體驗。通過setonerrorlistener(android.media.mediaplayer.onerrorlistener)可以設定該***。如果mediaplayer進入了error狀態,可以通過呼叫reset()來恢復,使得mediaplayer重新返回到idle狀態
end 狀態:通過release()方法可以進入end狀態,只要mediaplayer物件不再被使用,就應當盡快將其通過release()方法釋放掉,以釋放相關的軟硬體元件資源,這其中有些資源是只有乙份的(相當於臨界資源)。如果mediaplayer物件進入了end狀態,則不會在進入任何其他狀態了。
MediaPlayer的生命週期以及狀態轉換
有關如何使用mediaplayer的更多資訊,請閱讀media playback開發人員指南。statediagram 狀態圖 從這個狀態圖,可以看到,乙個mediaplayer物件有以下狀態 此外,使用new建立的mediaplayer物件處於idle狀態,而用乙個過載的構造方法new出來的med...
React 生命週期 生命週期方法
生命週期 掛載 更新 解除安裝 元件被建立 執行初始化 並被掛載到dom中,完成元件的第一次渲染 constructor props getderivedstatefromprops props,state render componentdidmount 元件被建立時會首先呼叫元件的構造方法,接受...
actived生命週期 Vuejs 生命週期
每個 vue 例項在被建立時都要經過一系列的初始化過程。如需要設定資料監聽 編譯模板 將例項掛載到 dom 並在資料變化時更新 dom 等。同時在這個過程中也會執行一些叫做生命週期鉤子的函式,這給了使用者在不同階段新增自己的 的機會。乙個 vue 例項 我們建立乙個 vue 例項,並在每個階段驗證 ...