安卓:YouTube播放器已经发布

我收到此错误,但未显式调用。这是发生崩溃的代码段:Fatal Exception: java.lang.IllegalStateException This YouTubePlayer has been releasedrelease()

if(youtubePlayer != null){
 time = youtubePlayer.getCurrentTimeMillis();//exception may occur
}

是否可以检查那是?任何回调?谢谢。youtubePlayerreleased


答案 1

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();
}

答案 2

我通过在“活动”中将 videoPlayer 设为空来解决此问题。onDestroy

编辑:

尝试了,它工作正常。
@MickeyTin,谢谢。onStop