Android MediaPlayer: сохранение при повороте экрана
Моё приложение в разных ситуациях может проигрывать звуки. Звуки короткие - порядка 1 секунды. Звуки загружаются из интернета:
var player = MediaPlayer()
player.setDataSource(this, file.uri, file.headers)
player.prepareAsync()
Звуков может быть много и загрузка их может занимать заметное время. Сейчас экземпляры MediaPlayer хранятся в Activity. Соответственно, при повороте экрана Activity вместе с плеерами уничтожается и создаётся заново. При повороте экрана все аудио файлы заново скачиваются и интернета. Это приводит к задержке инициализации и мне кажется для пользователя будет неожиданностью, что при поворотах экрана расходуется его интернет трафик.
Подскажите пожалуйста, как это можно сделать более правильно?
Возможные варианты, про которые я прочитал в документации:
- Хранить MediaPlayer во ViewModel
- Хранить в Fragment, сделав ему setRetainInstance(true)
- Может быть можно как-то сохранять MediaPlayer в функции onSaveInstanceState?
- Вроде как можно сделать Service, чтобы проигрывать в фоне, но мне кажется, что для моей задачи это слишком сложно. Мне не нужно проигрывать звуки в фоне. Если проигрывание будет прерываться при повороте экрана - это допустимо.
Какой из этих вариантов лучше? Может быть есть лучшее решение?