移动到 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 崩溃的主要内容,如果未能解决你的问题,请参考以下文章