我有我的主要 Activity 类、一个 Renderer 类和我的自定义 soundPool 类(称为 soundMan),我可以在我的 Activity 类中创建和访问 SoundPool(IE soundMan) 对象,而不会出现太多问题。
但是,这对我来说不是很好,我从在单独线程上运行的 Renderer 类 (GLSurfaceView.Renderer) 中的资源创建所有对象。
因此,当我尝试从我的渲染器类创建一个新的 soundPool (soundMan) 对象时,我收到错误“无法在未调用 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);
}
}
我可以像这样(在 onCreate 中)在我的 Activity 类中创建和使用一个对象:
soundMan soundPlay = new soundMan(this); //Create object
soundPlay.PlaySound(); //Play the sound
但是,我希望能够从我的渲染线程中执行与上述相同的操作
我知道我可以将我的 Activity 类中的 soundMan 对象设置为静态并像这样使用它:
MainActivity.soundPlay.PlaySound();
但这显然不是实现我所追求的好方法。
同样,示例(带有代码)将不胜感激。