Я собираюсь создать простое приложение для Android для воспроизведения звука при нажатии кнопки, но я борюсь с пониманием шаблона проектирования singleton, который был бы очень полезен в этом приложении. Чего я пытаюсь добиться, так это иметь несколько действий и совместно использовать только один экземпляр MediaPlayer среди них, чтобы когда пользователь нажимал кнопку, проигрывался звук, и если он нажимал ту же или другую кнопку в том же или другом действии, звук останавливался.
Вот мой код, но после двойного нажатия кнопки создается другой экземпляр MediaPlayer, и вы можете здесь воспроизводить один и тот же звук одновременно
public class MyMediaPlayer {
MediaPlayer mp;
private static volatile MyMediaPlayer instance = null;
private MyMediaPlayer() { }
public static MyMediaPlayer getInstance() {
if (instance == null) {
synchronized (MyMediaPlayer.class) {
if (instance == null) {
instance = new MyMediaPlayer();
}
}
}
return instance;
}
}
и MainActivity.java:
public class MainActivity extends Activity {
private MyMediaPlayer player = getInstance();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
public void playSound(View view){
player.mp = MediaPlayer.create(getApplicationContext(), R.raw.sound);
player.mp.start();
}
}
Поскольку я не очень опытен, не могли бы вы в дополнение к советам по приведенному выше коду объяснить мне, как я могу получить доступ к полю синглтона. Я не уверен, что мой подход правильный. Если у меня есть одноэлементный класс, и я хочу использовать этот экземпляр MediaPlayer, как мне это сделать?
Спасибо!