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)
Fatal Exception: java.lang.NoClassDefFoundError: rt
Ответ 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);
}
Надеюсь, это поможет кому-то, благословения для всех.