Youtube SDK падает с ошибкой DeadObjectException при переходе в приложение YouTube

Мое приложение обеспечивает просмотр youtube с помощью Youtube Android SDK. Нет проблем с показом видео, но при запуске приложения 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 5.3.24

Ответы

Ответ 1

Это происходит, когда устройство вращается (или другое изменение конфигурации системы, которое заставляет активность перезапускаться) после того, как youTubeView.initialize и до вызоваInitializationSuccess. Я понимаю, что когда вы вращаете свое устройство в это время, исходный объект игрока станет мертвым, и поток, который предположительно вызовет OnInitializationSuccess, все еще работает, и как только этот поток вызывает OnInitializationSuccess, он будет использовать объект мертвого игрока.

оберните ваш плеер следующей попыткой 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