android - 移动到 youtube 应用程序时,Youtube SDK 因 DeadObjectException 而崩溃

标签 android youtube-api android-youtube-api

我的应用使用 Youtube Android SDK 提供 youtube View 。 显示视频没有问题,但在打开 youtube 应用程序时会因 DeadObjectException 而崩溃。

我的代码如下

//init
FragmentTransaction fragmentTransaction = fm.beginTransaction();

YouTubePlayerSupportFragment fragment = new YouTubePlayerSupportFragment();
fragmentTransaction.replace(R.id.fragmentz, fragment);
fragmentTransaction.commit();

fragment.initialize(Constants.YOUTUBE_DEV_KEY, this);

@Override
public void onInitializationSuccess(YouTubePlayer.Provider provider, final YouTubePlayer youTubePlayer, boolean wasRestored) {
    if (!wasRestored) {
        this.youTubePlayer = youTubePlayer;
        this.youTubePlayer.setShowFullscreenButton(true);
        try {
            this.youTubePlayer.loadVideo(youtubeLink);
            //other stuff
        } catch (IllegalStateException e) {
            Logger.e(e);
        }
    }
}

当 1) 通过 intent 直接移动到 youtube 应用程序或 2) 通过播放器 View 上的 youtube 图标移动到 youtube 应用程序时,它会崩溃。

崩溃日志如下

java.lang.IllegalStateException: android.os.DeadObjectException
        at com.google.android.youtube.api.jar.client.RemoteEmbeddedPlayer.u(SourceFile:506)
        at com.google.android.apps.youtube.api.jar.a.a.t(SourceFile:467)
        at com.google.android.youtube.player.internal.h.onTransact(SourceFile:392)
        at android.os.Binder.transact(Binder.java:361)
        at com.google.android.youtube.player.internal.d$a$a.r(Unknown Source)
        at com.google.android.youtube.player.internal.s.h(Unknown Source)
        at com.google.android.youtube.player.YouTubePlayerView.e(Unknown Source)
        at com.google.android.youtube.player.YouTubePlayerSupportFragment.onSaveInstanceState(Unknown Source)
        at android.support.v4.app.Fragment.performSaveInstanceState(Fragment.java:1647)
        at android.support.v4.app.FragmentManagerImpl.saveFragmentBasicState(FragmentManager.java:1610)
        at android.support.v4.app.FragmentManagerImpl.saveAllState(FragmentManager.java:1678)
        at android.support.v4.app.FragmentActivity.onSaveInstanceState(FragmentActivity.java:546)
        at com.actionbarsherlock.app.SherlockFragmentActivity.onSaveInstanceState(SherlockFragmentActivity.java:127)
 Caused by: android.os.DeadObjectException
        at android.os.BinderProxy.transact(Native Method)
        at com.google.android.apps.youtube.api.b.a.aq.k(SourceFile:685)
        at  com.google.android.youtube.api.jar.client.RemoteEmbeddedPlayer.u(SourceFile:503)
        at com.google.android.apps.youtube.api.jar.a.a.t(SourceFile:467)
        at com.google.android.youtube.player.internal.h.onTransact(SourceFile:392)
        at android.os.Binder.transact(Binder.java:361)
        at com.google.android.youtube.player.internal.d$a$a.r(Unknown Source)
        at com.google.android.youtube.player.internal.s.h(Unknown Source)
        at com.google.android.youtube.player.YouTubePlayerView.e(Unknown Source)
        at com.google.android.youtube.player.YouTubePlayerSupportFragment.onSaveInstanceState(Unknown Source)
        at android.support.v4.app.Fragment.performSaveInstanceState(Fragment.java:1647)

请帮我解决这个问题。

我已经在 nexus 5、android 4.4、youtube api 1.0、youtube app 5.3.24 上测试过

最佳答案

在调用 youTubeView.initialize 之后和调用 onInitializationSuccess 之前,当设备正在旋转(或导致 Activity 重新启动的其他系统配置更改)时会发生这种情况。我的理解是,当您此时旋转您的设备时,原始玩家对象将变为死机,并且假设调用 onInitializationSuccess 的线程仍在运行,一旦该线程调用 onInitializationSuccess 它将使用死机玩家对象。

用下面的 try catch 包裹你的播放器将解决问题:

try{
   youtubeplayer.load(0..;
}catch (IllegalStateException ise){
   //do nothing probably device go rotated
   return;
}

**答案摘自 https://code.google.com/p/gdata-issues/issues/detail?id=4395

关于android - 移动到 youtube 应用程序时,Youtube SDK 因 DeadObjectException 而崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20514543/

相关文章:

android - SharedPreferences 变量始终返回 false

android - 使用 YouTubeStandalonePlayer 纵向显示 YouTube 视频

安卓NDK。 Eclipse 项目属性中没有 C/C++ 部分

javascript - 如何仅在对 gapi.client.youtube 的 request.execute 完成后才执行功能?

youtube - 如何从 youtube 获取所有观看历史记录?

youtube-api - 如何在没有 API key 的情况下在客户端计算机上使用 Youtube api v3?

java - 无法在同一 Activity 中创建多个 YoutubePlayerFragment

android - 使用 YouTubePlayerSupportFragment 为 youtube 视频设置特定时间

来自动态创建的适配器 ListView 的Android getText

android - 带有导航组件的滑动动画