Синглтон для многократного использования? - PullRequest
0 голосов
/ 06 сентября 2018

Я занимаюсь разработкой приложения для Android, в котором я могу / могу использовать только один экземпляр MediaPlayer (экземпляр Singleton).

static MediaPlayer mp;
public static MediaPlayer getMediaPlayer() {
  if (mp == null) {
     mp = new MediaPlayer();
  }

  return mp;
}

Теперь это действие можно назвать для двух целей

  1. изнутри приложения (скажем, ABC)
  2. из любого другого приложения (скажем, XYZ) для предварительного просмотра

Этот экземпляр медиаплеера должен воспроизводить видео или аудио. Итак, я создал класс, который обрабатывает запрос (параметризованный конструктор для проверки необходимого экземпляра аудио или видео) и на основе запроса создает требуемый экземпляр.

Но проблема возникает, когда пользователь внутри приложения воспроизводит аудиофайл, а пользователь запускает другое приложение (XYZ) и запрашивает воспроизведение видео.

Теперь я сохраняю предыдущее состояние MediaPlayer (например, какой файл он воспроизводил, текущую позицию и т. Д.) И выпускаю MediaPlayer для использования в приложении XYZ для воспроизведения видео. И как только пользователь прекращает воспроизведение видео, ABC возобновляет воспроизведение аудиофайла на основе сохраненного экземпляра.

Так это правильный подход? Или мне нужно изменить архитектуру этой задачи?

Пожалуйста, предложите w.r.t. шаблоны дизайна

Ответы [ 2 ]

0 голосов
/ 06 сентября 2018

Использование синглетонов в Android для сохранения состояния - это то, к чему нужно быть осторожным.

Возможно, вам следует изучить жизненный цикл действия, чтобы понять, в каких случаях вы можете потерять одноэлементный экземпляр (и, следовательно, все данные, хранящиеся в нем).

Вот некоторая информация

Например, когда ваше приложение работает в фоновом режиме, мобильный телефон может запросить память и уничтожить экземпляр вашего синглтона.

0 голосов
/ 06 сентября 2018

Вот пример синглтона, который я бы попробовал:

public class MediaPlayer{


        private static MediaPlayer instance = new MediaPlayer();

        public static MediaPlayer getInstance() {
                return MediaPlayer.instance;
        }

}

Теперь у вас есть сценарий, в котором вы можете создавать объекты на основе метода getInstance (), который может ссылаться только на один и тот же объект, который обеспечит ваш шаблон синглтона. Я протестировал его и попытался создать объекты из этого шаблона:

MediaPlayer t1 = MediaPlayer.getInstance();
MediaPlayer t2 = MediaPlayer.getInstance();
System.out.println(t1.equals(t2));

результат:

true
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...