项目使用Exoplayer 播放视频。发现个神奇的问题。如果播放过一次视频。然后重新滚动我的组件 。会发现 越到后面越卡。找了好几天也没发现原因。后来 发现我在滚动组件的时候调用了 player.stop 。 而且是一直调用。我进入stop 内部看了一下
public synchronized void blockUninterruptible() {
boolean wasInterrupted = false;
while (!isOpen) {
try {
wait();
} catch (InterruptedException e) {
wasInterrupted = true;
}
}
if (wasInterrupted) {
// Restore the interrupted status.
Thread.currentThread().interrupt();
}
}
看到里面有线程等待的调用。 应该是不断调用 stop 等 发生了多次调用wait 让主线程出现了 阻塞。导致界面卡顿。于是判断播放器状态 只有 播放器 没有停止的时候调用一次stop