【问题标题】:GoogleApiAvailability crash my app when SupportErrorDialogFragment has to show up当 SupportErrorDialogFragment 必须显示时,GoogleApiAvailability 使我的应用程序崩溃
【发布时间】:2016-10-25 16:34:28
【问题描述】:

我在项目中使用的播放服务是:

compile 'com.google.android.gms:play-services-gcm:9.4.0'
compile 'com.google.android.gms:play-services-analytics:9.4.0'
compile 'com.google.android.gms:play-services-auth:9.4.0'

我从来没有自己打电话给GoogleApiAvailability,但我想当我使用 gcm 或 google 登录时,我的应用程序似乎因为可用性检查而崩溃。

Fatal Exception: java.lang.IllegalStateException: Can not perform this action after onSaveInstanceState
       at android.support.v4.app.FragmentManagerImpl.checkStateLoss(FragmentManager.java:1493)
       at android.support.v4.app.FragmentManagerImpl.enqueueAction(FragmentManager.java:1511)
       at android.support.v4.app.BackStackRecord.commitInternal(BackStackRecord.java:638)
       at android.support.v4.app.BackStackRecord.commit(BackStackRecord.java:617)
       at android.support.v4.app.DialogFragment.show(DialogFragment.java:139)
       at com.google.android.gms.common.SupportErrorDialogFragment.show(Unknown Source)
       at com.google.android.gms.common.GoogleApiAvailability.zza(Unknown Source)
       at com.google.android.gms.common.GoogleApiAvailability.zza(Unknown Source)
       at com.google.android.gms.internal.zzpn$zza.run(Unknown Source)
       at android.os.Handler.handleCallback(Handler.java:815)
       at android.os.Handler.dispatchMessage(Handler.java:104)
       at android.os.Looper.loop(Looper.java:194)
       at android.app.ActivityThread.main(ActivityThread.java:5631)
       at java.lang.reflect.Method.invoke(Method.java)
       at java.lang.reflect.Method.invoke(Method.java:372)
       at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:959)
       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:754)

看起来,当播放服务出现一些问题时,它应该向用户显示任何对话框,但我的应用程序已经不在前台,所以 onSaveInstanceState 已经发生并且一些回调显示错误对话框 rasie IllegalStateException .

【问题讨论】:

  • 在 onStart 中注册回调。在 onStop 中取消注册回调。在生命周期方法中调用 super。利润。

标签: android google-play-services


【解决方案1】:

IllegalStateException 错误意味着您的方法已在非法或不适当的时间/状态被调用以执行您请求的操作。

这里是complete explanation,说明为什么会出现这种错误。

您可以尝试按照这里的解决方案 issue 由 覆盖onResumeFragments() 而不是OnPostResume

  • 覆盖 OnPostResume,如果您扩展 Activity(适用于 API 11+)

  • 如果您扩展 FragmentActivity,则覆盖 onResumeFragments

有关更多信息,请查看这些相关主题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-08-03
    • 1970-01-01
    • 1970-01-01
    • 2019-10-12
    • 2016-06-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多