我收到此错误Fatal Exception: java.lang.IllegalStateExceptionThis YouTubePlayer has been released,但是没有显式调用release()。这是发生崩溃的那段代码:

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

是否可以检查youtubePlayerreleased?有回叫吗?谢谢。

最佳答案

Youtube SDK中的大多数代码都被混淆了,这使得调试真的很困难。而且没有任何直接方法可以检查YoutubePlayer是否已发布,而也无济于事。

话虽如此,但我认为使YoutubePlayer为null(在onStop()中)似乎比适当的解决方案更像是一种hack。您应该在onDestroy()中释放YoutubePlayer,并且不要在任何地方手动将其分配为null。检查YoutubePlayer是否已释放的一种简单方法是将您的调用(例如youtubePlayer.loadVideo(),cueVideo(),getCurrentTimeMillis()等)放在try catch块中并捕获IllegalStateException异常。

根据Youtube SDK documentation上的错误:



因此,要创建YoutubePlayer的新实例,只需在catch块中调用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();
}

10-02 10:05