Youtube SDK中的大多数代码都是模糊的,这使得调试非常困难。事实上,没有任何直接的方法来检查YoutubePlayer是否已发布,这也无济于事。
话虽如此,我认为使YoutubePlayer为空(在onStop()中)对我来说似乎更像是一种黑客攻击,而不是一个适当的解决方案。您应该在 onDestroy() 中释放 YoutubePlayer,并且不要在任何地方手动将其分配为 null。检查YoutubePlayer是否已发布的一种简单方法是将您的调用(如youtubePlayer.loadVideo(),cueVideo(),getCurrentTimeMillis()等)放入尝试捕获块中并捕获TravilStateException异常。
根据Youtube SDK关于错误的文档:
public static final YouTubePlayer.ErrorReason
UNEXPECTED_SERVICE_DISCONNECTION
由于与 YouTube API 服务意外断开连接,播放已被取消,并且播放器已被释放。对此播放器实例的任何进一步调用都将导致错误,必须创建新的播放器实例才能重新启用播放。
因此,要创建YoutubePlayer的新实例,只需调用捕获块中的 initialize() 方法即可。
例:
public void setVideoId(final String videoId) {
if (videoId != null && !videoId.equals(this.videoId)) {
this.videoId = videoId;
if (youtubePlayer != null) {
try {
youtubePlayer.loadVideo(videoId);
} catch (IllegalStateException e) {
initialize(API_KEY, this);
}
}
}
}
@Override
public void onDestroy() {
if (youtubePlayer != null) {
youtubePlayer.release();
}
super.onDestroy();
}