Я только что переключился на Exoplayer с MediaPlayer, чтобы проигрывать фоновую музыку в игровом приложении. Во время всех моих тестов казалось, что он работает нормально, но после частичного выпуска я начал видеть сбои в
crashalytics:
NoSuchElementException at java.util.ArrayDeque.removeFirst (ArrayDeque.java:264)
com.google.android.exoplayer2.ExoPlayerImpl.notifyListeners (ExoPlayerImpl.java:737)
com.google.android.exoplayer2.ExoPlayerImpl.updatePlaybackInfo (ExoPlayerImpl.java:710)
com.google.android.exoplayer2.ExoPlayerImpl.handlePlaybackInfo (ExoPlayerImpl.java:652)
com.google.android.exoplayer2.ExoPlayerImpl.handleEvent (ExoPlayerImpl.java:595)
com.google.android.exoplayer2.ExoPlayerImpl$1.handleMessage (ExoPlayerImpl.java:127)
После поиска в Google кажется, что это связано с потоками, и мне нужно вызвать его в том же потоке, в котором он был создан. Итак, на мои вопросы по моей реализации: у меня есть игра с 4-мя действиями, одно из которых - игровой раннер. основное действие иметь одно действие экзоплеера 2 иметь одно действие 3 иметь одно игровое действие создает свое собственное действие внутри игрового потока
каждый раз, когда мне нужен экзоплеер, я вызываю этот метод:
private SimpleExoPlayer createSimpleExoPlayer(Context context, int resId, boolean repeat) {
SimpleExoPlayer exoPlayer = new SimpleExoPlayer.Builder(context).build();
DataSource.Factory dataSourceFactory = new DefaultDataSourceFactory(context,
Util.getUserAgent(context, "appname"));
Uri uri = RawResourceDataSource.buildRawResourceUri(resId);
MediaSource source = new ProgressiveMediaSource.Factory(dataSourceFactory).createMediaSource(uri);
exoPlayer.prepare(source);
if (repeat)
exoPlayer.setRepeatMode(Player.REPEAT_MODE_ALL);
//exoPlayer.setPlayWhenReady(true);
return exoPlayer;
}
и игрок может быть освобожден и воссоздан при переключении фоновой музыки внутри игрового цикла. Так может это быть причиной проблем? Я неправильно понял, как это работает, и, может быть, у меня должен быть только ОДИН экземпляр, или можно иметь несколько экземпляров, как я? Любые советы приветствуются.