我有我的主要活動類,一個Renderer類和我的自定義soundPool類(稱爲soundMan),我可以在我的Activity類中創建和訪問SoundPool(I.E. soundMan)對象,而沒有太多問題。如何從主/用戶界面以外的線程訪問soundPool?
但是,這對我來說並不好,我從我的Renderer類(GLSurfaceView.Renderer)中的資源創建了所有的對象,這些對象正在單獨的線程上運行。
所以,當我試圖從我的渲染器類中創建一個新的Soundpool(錄音師)對象,我得到錯誤「無法創建內螺紋處理程序尚未調用looper.prepare()」
我我確定一定有辦法解決這個問題,但我無法解決這個問題。任何幫助,將不勝感激。
代碼及實例遵循
我的自定義的Soundpool類
public class soundMan extends Activity {
//Simple soundPool class
private SoundPool soundPool;
private int soundID;
soundMan(Context myContext){
soundPool = new SoundPool(3, AudioManager.STREAM_MUSIC, 0);
soundID = soundPool.load(myContext, R.raw.matches, 1);
}
public void PlaySound(){
soundPool.play(soundID, 0.9f, 0.9f, 1, 0, 0);
}
}
我可以創建和我的Activity類中使用的對象,像這樣(在的onCreate):
soundMan soundPlay = new soundMan(this); //Create object
soundPlay.PlaySound(); //Play the sound
不過,我希望能夠做同樣的上述但是從我渲染線程
我知道我可以在我的Activity類設置我的錄音師對象靜態和使用它像這樣:
MainActivity.soundPlay.PlaySound();
但是,這顯然不是一個很好的方式來實現我所追求的。
再次,示例(帶代碼)將不勝感激。
嗨@Pragnani謝謝,我確實嘗試了runOnUiThread,並且最初,儘管我沒有得到任何錯誤,聲音也不會播放,但是每當我出於某種原因運行它時,應用程序都會崩潰 - 您能不能請發佈您提到的'Handler'方法的代碼示例?我沒有讀到這個,但找不到一個明確的例子 - 再次感謝 – Zippy 2013-05-06 01:02:46
@Zippy更新代碼,檢查一次 – Pragnani 2013-05-06 01:12:29
謝謝@Pragnani更新的代碼 - 抱歉,另外一個問題,我的Renderer類不是我的內部類活動類。它在一個單獨的文件中,那麼我如何訪問我的渲染器類中的Activity類中創建的處理程序?再次感謝。 – Zippy 2013-05-06 01:14:37