Exoplayer 线程错误 NoSuchElementExceptionat java.util.ArrayDeque.removeFirst
Exoplayer threading errors NoSuchElementExceptionat java.util.ArrayDeque.removeFirst
我刚从 MediaPlayer 切换到 Exoplayer,用于在游戏应用程序中播放背景音乐。
在我所有的测试中,它似乎工作正常,但在部分发布后,我开始看到
中的崩溃
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.handleMessage (ExoPlayerImpl.java:127)
谷歌搜索后,它似乎与线程有关,我需要在创建它的同一线程上调用它。
所以关于我的实施问题:
我有一个包含 4 个活动的游戏,其中一个是游戏运行者。
main activity 有一个 exoplayer
activity 2个有一个
activity3个有一个
游戏activity 正在游戏线程
中创建自己的线程
每次我需要一个 exoplayer 我都会调用这个方法:
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;
}
并且在游戏循环中切换背景音乐时可能会释放并重新创建玩家。
那么这可能是导致问题的原因吗?
我是否误解了它的工作原理,也许我应该只拥有一个实例,或者像我一样拥有多个实例是否可以?
欢迎任何建议。
问题是我有一个计时器,它在 exoplayer 过期时调用它,因此从另一个线程调用它
我刚从 MediaPlayer 切换到 Exoplayer,用于在游戏应用程序中播放背景音乐。 在我所有的测试中,它似乎工作正常,但在部分发布后,我开始看到
中的崩溃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.handleMessage (ExoPlayerImpl.java:127)
谷歌搜索后,它似乎与线程有关,我需要在创建它的同一线程上调用它。 所以关于我的实施问题: 我有一个包含 4 个活动的游戏,其中一个是游戏运行者。 main activity 有一个 exoplayer activity 2个有一个 activity3个有一个 游戏activity 正在游戏线程
中创建自己的线程每次我需要一个 exoplayer 我都会调用这个方法:
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;
}
并且在游戏循环中切换背景音乐时可能会释放并重新创建玩家。 那么这可能是导致问题的原因吗? 我是否误解了它的工作原理,也许我应该只拥有一个实例,或者像我一样拥有多个实例是否可以? 欢迎任何建议。
问题是我有一个计时器,它在 exoplayer 过期时调用它,因此从另一个线程调用它