Fatal Exception: java.lang.NoClassDefFoundError: rt

Fatal Exception: java.lang.NoClassDefFoundError: rt
   at rs.(SourceFile:17)
   at android.support.v7.widget.RecyclerView.onSaveInstanceState(SourceFile:201)
   at android.view.View.dispatchSaveInstanceState(View.java:13651)
   at android.view.ViewGroup.dispatchFreezeSelfOnly(ViewGroup.java:2835)
   at android.support.v7.widget.RecyclerView.dispatchSaveInstanceState(SourceFile:220)
   at android.view.ViewGroup.dispatchSaveInstanceState(ViewGroup.java:2821)
   at android.view.ViewGroup.dispatchSaveInstanceState(ViewGroup.java:2821)
   at android.view.ViewGroup.dispatchSaveInstanceState(ViewGroup.java:2821)
   at android.view.ViewGroup.dispatchSaveInstanceState(ViewGroup.java:2821)
   at android.view.ViewGroup.dispatchSaveInstanceState(ViewGroup.java:2821)
   at android.view.View.saveHierarchyState(View.java:13634)
   at android.support.v4.app.FragmentManagerImpl.saveFragmentViewState(FragmentManager.java:2594)
   at android.support.v4.app.FragmentManagerImpl.saveFragmentBasicState(FragmentManager.java:2615)
   at android.support.v4.app.FragmentManagerImpl.saveAllState(FragmentManager.java:2678)
   at android.support.v4.app.FragmentController.saveAllState(FragmentController.java:134)
   at android.support.v4.app.FragmentActivity.onSaveInstanceState(FragmentActivity.java:571)
   at android.support.v7.app.AppCompatActivity.onSaveInstanceState(AppCompatActivity.java:509)
   at android.app.Activity.performSaveInstanceState(Activity.java:1229)
   at android.app.Instrumentation.callActivityOnSaveInstanceState(Instrumentation.java:1229)
   at android.app.ActivityThread.performStopActivityInner(ActivityThread.java:3390)
   at android.app.ActivityThread.handleStopActivity(ActivityThread.java:3449)
   at android.app.ActivityThread.access$1200(ActivityThread.java:169)
   at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1307)
   at android.os.Handler.dispatchMessage(Handler.java:102)
   at android.os.Looper.loop(Looper.java:146)
   at android.app.ActivityThread.main(ActivityThread.java:5487)
   at java.lang.reflect.Method.invokeNative(Method.java)
   at java.lang.reflect.Method.invoke(Method.java:515)
   at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1283)
   at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1099)
   at dalvik.system.NativeStart.main(NativeStart.java)

Ответ 1

Я исправлю это, выпустив YouTubePlayer на onSavedInstanceState и onStop.

@Nullable
protected YouTubePlayer mUtPlayer;

@Override
public void onSaveInstanceState(Bundle outState) {
    /* release ut when home button pressed. */
    if (mUtPlayer != null) {
        mUtPlayer.release();
    }
    mUtPlayer = null;
    super.onSaveInstanceState(outState);
}

@Override
public void onStop() {
    /* release ut when go to other fragment or back pressed */
    if (mUtPlayer != null) {
        mUtPlayer.release();
    }
    mUtPlayer = null;
    super.onStop();
}

Ответ 2

Для людей, что решение Razgriz не работает, просто добавьте те же строки в onPause вместо onSaveInstanceState и onStop и инициализируйте YouTubePlayerFragment в onResume вместо onCreate, поэтому он будет доступен каждый раз, когда активность будет на переднем плане и будет выпущена, когда приложение перейдет в фоновый режим:

Обратите внимание, что код всегда следует размещать после методов super.

    @Override
    protected void onResume() {
        super.onResume();
        YouTubePlayerFragment youTubePlayerFragment =
                (YouTubePlayerFragment) getFragmentManager().findFragmentById(R.id.youtubeFragmentView);
        youTubePlayerFragment.initialize(YouTubeDeveloperKey, this);
    }

    @Override
    protected void onPause() {
        super.onPause();
        if (youTubePlayer != null) {
            youTubePlayer.release();
        }
        youTubePlayer = null;
    }

Ответ 3

На всякий случай данное решение выше не сработало для вас, рассмотрите следующий, он работает! Трюк здесь заключается в том, чтобы избежать сохранения состояния всех просмотров, связанных с YouTube. Конечно, решение имеет свои недостатки, но это лучше, чем сбой приложения, как это случилось с моим:

public interface ICallableOnView {
    void call(View view);
}

public static void recursiveCallOnView(View view, ICallableOnView callableOnView) {
    if (view != null) {
        if (view instanceof ViewGroup) {
            for (int i = 0; i < ((ViewGroup) view).getChildCount(); i++) {
                recursiveCallOnView(((ViewGroup) view).getChildAt(i), callableOnView);
            }
        }
        callableOnView.call(view);
    }
}

@Override
public void onSaveInstanceState(Bundle outState) {
    // Disable view state saving to prevent saving states from youtube apk which cannot be restored.
    // This is to avoid the bug "java.lang.NoClassDefFoundError: rt at rs.<clinit>(SourceFile:17)"
    recursiveCallOnView(mViewHolder.youTubeVideoContainerLayout, new ICallableOnView() {
        @Override
        public void call(View view) {
            view.setSaveEnabled(false);
        }
    });

    super.onSaveInstanceState(outState);
}

Надеюсь, это поможет кому-то, благословения для всех.