应用程序最小化时,YouTubePlayerView的活动崩溃

时间:2017-07-03 07:41:37

标签: android youtube-api android-youtube-api

我已将YouTubePlayerView库集成到我们的应用程序中,并且其工作正常但是每当我最小化应用程序时它会崩溃,或者您可以说应用程序在后台崩溃时会崩溃。

以下是崩溃日志:

    java.lang.NoClassDefFoundError: rt
        at rs.<clinit>(SourceFile:17)
        at android.support.v7.widget.RecyclerView.onSaveInstanceState(SourceFile:201)
        at android.view.View.dispatchSaveInstanceState(View.java:12985)
        at android.view.ViewGroup.dispatchFreezeSelfOnly(ViewGroup.java:2643)
        at android.support.v7.widget.RecyclerView.dispatchSaveInstanceState(SourceFile:220)
        at android.view.ViewGroup.dispatchSaveInstanceState(ViewGroup.java:2629)
        at android.view.ViewGroup.dispatchSaveInstanceState(ViewGroup.java:2629)
        at android.view.ViewGroup.dispatchSaveInstanceState(ViewGroup.java:2629)
        at android.view.ViewGroup.dispatchSaveInstanceState(ViewGroup.java:2629)
        at android.view.ViewGroup.dispatchSaveInstanceState(ViewGroup.java:2629)
        at android.view.ViewGroup.dispatchSaveInstanceState(ViewGroup.java:2629)
        at android.view.ViewGroup.dispatchSaveInstanceState(ViewGroup.java:2629)
        at android.view.View.saveHierarchyState(View.java:12968)
        at com.android.internal.policy.impl.PhoneWindow.saveHierarchyState(PhoneWindow.java:1705)
        at android.app.Activity.onSaveInstanceState(Activity.java:1277)
        at com.google.android.youtube.player.YouTubeBaseActivity.onSaveInstanceState(Unknown Source)
        at android.app.Activity.performSaveInstanceState(Activity.java:1226)
        at android.app.Instrumentation.callActivityOnSaveInstanceState(Instrumentation.java:1223)
        at android.app.ActivityThread.performStopActivityInner(ActivityThread.java:3342)
        at android.app.ActivityThread.handleStopActivity(ActivityThread.java:3401)
        at android.app.ActivityThread.access$1100(ActivityThread.java:139)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1320)
        at android.os.Handler.dispatchMessage(Handler.java:102)
        at android.os.Looper.loop(Looper.java:149)
        at android.app.ActivityThread.main(ActivityThread.java:5257)
        at java.lang.reflect.Method.invokeNative(Native Method)
        at java.lang.reflect.Method.invoke(Method.java:515)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:609)
        at dalvik.system.NativeStart.main(Native Method)
07-03 13:02:44.608 31106-31174/com.seeken D/FA: Logging event (FE): _ae, Bundle[{_o=crash, timestamp=1499067164609, fatal=1}]
07-03 13:02:44.808 31106-31106/com.seeken I/dalvikvm: Could not find method java.util.Locale.toLanguageTag, referenced from method bme.a
07-03 13:02:44.808 31106-31106/com.seeken W/dalvikvm: VFY: unable to resolve virtual method 10275: Ljava/util/Locale;.toLanguageTag ()Ljava/lang/String;
07-03 13:02:44.808 31106-31106/com.seeken D/dalvikvm: VFY: replacing opcode 0x6e at 0x00e4
07-03 13:02:44.848 31106-31106/com.seeken D/dalvikvm: GC_FOR_ALLOC freed 3454K, 15% free 20646K/24152K, paused 25ms, total 25ms
07-03 13:02:44.868 31106-31106/com.seeken E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.seeken, PID: 31106
java.lang.NoClassDefFoundError: rt
    at rs.<clinit>(SourceFile:17)
    at android.support.v7.widget.RecyclerView.onSaveInstanceState(SourceFile:201)
    at android.view.View.dispatchSaveInstanceState(View.java:12985)
    at android.view.ViewGroup.dispatchFreezeSelfOnly(ViewGroup.java:2643)
    at android.support.v7.widget.RecyclerView.dispatchSaveInstanceState(SourceFile:220)
    at android.view.ViewGroup.dispatchSaveInstanceState(ViewGroup.java:2629)
    at android.view.ViewGroup.dispatchSaveInstanceState(ViewGroup.java:2629)
    at android.view.ViewGroup.dispatchSaveInstanceState(ViewGroup.java:2629)
    at android.view.ViewGroup.dispatchSaveInstanceState(ViewGroup.java:2629)
    at android.view.ViewGroup.dispatchSaveInstanceState(ViewGroup.java:2629)
    at android.view.ViewGroup.dispatchSaveInstanceState(ViewGroup.java:2629)
    at android.view.ViewGroup.dispatchSaveInstanceState(ViewGroup.java:2629)
    at android.view.View.saveHierarchyState(View.java:12968)
    at com.android.internal.policy.impl.PhoneWindow.saveHierarchyState(PhoneWindow.java:1705)
    at android.app.Activity.onSaveInstanceState(Activity.java:1277)
    at com.google.android.youtube.player.YouTubeBaseActivity.onSaveInstanceState(Unknown Source)
    at android.app.Activity.performSaveInstanceState(Activity.java:1226)
    at android.app.Instrumentation.callActivityOnSaveInstanceState(Instrumentation.java:1223)
    at android.app.ActivityThread.performStopActivityInner(ActivityThread.java:3342)
    at android.app.ActivityThread.handleStopActivity(ActivityThread.java:3401)
    at android.app.ActivityThread.access$1100(ActivityThread.java:139)
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1320)
    at android.os.Handler.dispatchMessage(Handler.java:102)
    at android.os.Looper.loop(Looper.java:149)
    at android.app.ActivityThread.main(ActivityThread.java:5257)
    at java.lang.reflect.Method.invokeNative(Native Method)
    at java.lang.reflect.Method.invoke(Method.java:515)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:609)
    at dalvik.system.NativeStart.main(Native Method)

这是我的清单:

<activity android:name=".activities.VideoActivity"
            android:configChanges="orientation|screenLayout|screenSize"/>

2 个答案:

答案 0 :(得分:1)

您可以参考此SO post,提出一些可能有用的解决方法:

  • YouTubePlayeronSavedInstanceState发布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();
}
  • 如果它不起作用,只需在onPause而不是onSaveInstanceStateonStop中添加相同的行,并在{{1}中初始化YouTubePlayerFragment而不是onResume,所以每次活动处于前台时它都可用,并在应用程序进入后台时释放。

补充参考:

答案 1 :(得分:0)

我认为由于配置更改而导致应用程序在重新启动时崩溃

您可以禁用方向更改的自动活动娱乐,并自行处理。

为此,请添加

android:configChanges="orientation|screenLayout|screenSize"

了解更多信息runtime-changes

或在您的活动中添加此代码

@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();
}