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

Posted

技术标签:

【中文标题】移动到 youtube 应用程序时,Youtube SDK 因 DeadObjectException 崩溃【英文标题】:Youtube SDK crashes with DeadObjectException when move to youtube app 【发布时间】:2013-12-29 03:42:57 【问题描述】:

我的应用使用 Youtube android SDK 提供 youtube 视图。 显示视频没有问题,但在打开 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) 直接通过意图移动到 youtube 应用程序或 2) 通过播放器视图上的 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 上进行了测试

【问题讨论】:

在我的 Nexus 4 Android 4.4 中也发生了同样的事情 你有没有解决你的问题,因为我也面临同样的问题。任何帮助都会得到承认。 @PDWaghela 不幸的是,我没有找到解决这个问题的好方法:( 好吧,我想我找到了原因,如果 youtubelink 为空,就会发生这种情况。因此它说 DeadObjectException。 【参考方案1】:

在调用 youTubeView.initialize 和 onInitializationSuccess 之前设备正在旋转(或导致活动重新启动的其他系统配置更改)时会发生这种情况。我的理解是,当您在此时旋转设备时,原始播放器对象将变为死机,并且假设调用 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

【讨论】:

好吧,但即使我不旋转设备也会出现这个问题。正如堆栈跟踪所说,在我无法捕获异常的地方引发了异常 ex) android.support.v4.app.Fragment.performSaveInstanceState 。 问题还是一样。你可以参考我的Question。您还有其他建议吗? @PravinsinghWaghela 它与空视频 ID 无关,这是您的错误

以上是关于移动到 youtube 应用程序时,Youtube SDK 因 DeadObjectException 崩溃的主要内容,如果未能解决你的问题,请参考以下文章

Youtube编码器无法启动直播

为 YouTube Gaming 注册新游戏

如何在未经授权的情况下上传到 YouTube

当频道开始直播时,从Youtube API获取通知?

无法在移动设备上使用 Revolution Slider 取消 YouTube 视频静音

直接链接到 YouTube 评论