Вы не должны наследовать Application
класс , если только вы не попытаетесь использовать шаблон Singleton.Поскольку Application является базовым классом, который содержит все другие компоненты, такие как действия и службы.
Вместо этого класс GameSound должен содержать Context
объект и надлежащий конструктор.
Пример)
public class GameSounds {
private GameSounds gameSounds;
private MediaPlayer soundPlayer;
private WeakReference<Context> mContext;
private int mySoundId = R.raw.letter_found;
private GameSounds(Context context) {
mContext = new WeakReference<>(context);
}
public GameSounds getInstance(Context context) {
if (gameSounds == null) {
gameSounds = new GameSounds(context);
}
return gameSounds;
}
public void playSound() {
soundPlayer = MediaPlayer.create(mContext.get(), mySoundId);
soundPlayer.start();
}
}
В этом коде вместо контекста есть WeakReference<Context>
.WeakReference используется для предотвращения утечек памяти , поскольку утечки памяти могут возникать, если у вас есть экземпляр вне действия.
Чтобы воспроизвести звук, выполните GameSounds.getInstance(this).playSound();
в порядке.
Если Context не может обеспечить при попытке воспроизвести звук, можно реализовать методы initialize
и вызванные в классе приложения.
public class GameSounds {
private static GameSounds gameSounds;
private MediaPlayer soundPlayer;
private WeakReference<Context> mContext;
private int mySoundId = R.raw.letter_found;
private GameSounds(Application context) {
mContext = new WeakReference<>(context);
}
public static void initialize(Application context) {
if (gameSounds == null) {
gameSounds = new GameSounds(context);
}
}
public static GameSounds getInstance() {
if (gameSounds == null) {
throw new NullPointerException("You need to initialize this code by GameSound.initialize(this) in application class");
}
return gameSounds;
}
public void playSound() {
soundPlayer = MediaPlayer.create(mContext.get(), mySoundId);
soundPlayer.start();
}
}
В этом случае вы должны сделать Класс приложения и инициализировать класс GameSound с помощью GameSound.initialize(this)
в классе приложения.
Для воспроизведения звука GameSound.getInstance().playSound()
хорошо.