Android - 让SoundPool成为一个全球级的? (适用于所有其他课程)

时间:2013-02-13 00:42:20

标签: android global-variables soundpool

所以基本上,我在SurfaceView上创建一个游戏,我在我的主CustomView上有这些类:

private TitleScreen titleScreen;
private GameScreen gameScreen;
private PauseScreen pauseScreen;
private GameOverScreen gameOverScreen;

这些类中的每一个都有draw(Canvas canvas)方法,并在用户转到另一个屏幕时调用。但问题是,我有一个SoundPlayer类,其中包含使用SoundPool的所有声音效果。它将用于所有这些类。实际上有一种方法是SoundPlayer只加载一次,然后在这些类中可用吗?或者我每次切换时都必须调用release()并调用构造函数?提前致谢。 :d

更新(已解决):

所以这就是我所做的。我创建了一个SoundPlayer类的实例:

public class SoundPlayerInstance {
private static SoundPlayer soundPlayerInstance;
private SoundPlayerInstance(){}

public static void createInstance(Context context){
soundPlayerInstance = new SoundPlayer(context);
}

public static SoundPlayer getInstance(){
return soundPlayerInstance;
}
}

在我的主视图中,在我做任何事之前,我在构造函数中调用它:

SoundPlayerInstance.createInstance();

然后,在我的任何课程中,我都可以通过它来播放声音:

SoundPlayerInstance.getInstance().playSound();

我认为这不仅对这些情况有用,而且对于想要实例化所有其他类中可用的类的开发人员(比如我)也很有用。感谢system32回答我的问题。 :)

1 个答案:

答案 0 :(得分:1)

  

实际上有一种方法是SoundPlayer只加载一次,然后是   在这些课程中可用吗?

这是可能的。使SoundPlayer类单身。

public class SoundPlayer
{

  private static SoundPlayer instance;

  private SoundPlayer()
  {
     // Do some stuff
  }

  public static SoundPlayer getInstance()
  {
     if(instance == null)
         instance = new SoundPlayer();

     return instance;
  }

}

要全局访问,只需致电SoundPlayer.getInstance()