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 过期时调用它,因此从另一个线程调用它