onBackPressed期间的android IllegalStateException

问题描述 投票:0回答:2

我的应用程序发生了一个非常奇怪的错误。

为了显示插页式广告,我重写了某些活动的onBackPressed。代码很简单

public void onBackPressed() {
        if (showIntertitialAd())
            //pseudocodehere
           show ad
            ... on close -> super.onBackPressed();

        else
            super.onBackPressed();
    }

但是,在某些情况下,在某种情况下,我会IllegalStateException是堆栈跟踪

Caused by java.lang.IllegalStateException: Can not perform this action after onSaveInstanceState
       at android.app.FragmentManagerImpl.checkStateLoss(FragmentManagerImpl.java:1413)
       at android.app.FragmentManagerImpl.popBackStackImmediate(FragmentManagerImpl.java:576)
       at android.app.Activity.onBackPressed(Activity.java:2507)
       at androidx.activity.ComponentActivity.access$001(ComponentActivity.java:53)
       at androidx.activity.ComponentActivity$1.run(ComponentActivity.java:77)
       at androidx.activity.OnBackPressedDispatcher.onBackPressed(OnBackPressedDispatcher.java:197)
       at androidx.activity.ComponentActivity.onBackPressed(ComponentActivity.java:314)
       at com.tomatedigital.adinjector.AdsAppCompatActivity.access$001(AdsAppCompatActivity.java:50)
       at com.tomatedigital.adinjector.AdsAppCompatActivity$OnBackPressededReward.onRewarded(AdsAppCompatActivity.java:542)
       at com.tomatedigital.adinjector.listener.InterstitialAdListener.onAdClosed(InterstitialAdListener.java:40)
       at com.google.android.gms.internal.ads.zzuf.onAdClosed(zzuf.java:4)
       at com.google.android.gms.internal.ads.zzvp.zza(zzvp.java:4)
       at com.google.android.gms.internal.ads.zzgk.onTransact(zzgk.java:13)
       at android.os.Binder.transact(Binder.java:387)
       at fj.b(fj.java:2)
       at com.google.android.gms.ads.internal.client.ag.a(ag.java:1)
       at com.google.android.gms.ads.internal.zzk.n(zzk.java:2)
       at com.google.android.gms.ads.internal.aq.n(aq.java)
       at com.google.android.gms.ads.internal.g.D(g.java)
       at com.google.android.gms.ads.internal.aq.D(aq.java:1)
       at com.google.android.gms.ads.internal.overlay.k.n(k.java:5)
       at com.google.android.gms.ads.internal.overlay.k.m(k.java:6)
       at com.google.android.gms.ads.internal.overlay.k.e(k.java:3)
       at com.google.android.gms.ads.internal.overlay.client.b.a(b.java:13)
       at fk.onTransact(fk.java:4)
       at android.os.Binder.transact(Binder.java:387)
       at com.google.android.gms.internal.ads.zzgi.zza(zzgi.java:21)
       at com.google.android.gms.internal.ads.zzapi.onPause(zzapi.java:17)
       at com.google.android.gms.ads.AdActivity.onPause(AdActivity.java:40)
       at android.app.Activity.performPause(Activity.java:6356)
       at android.app.Instrumentation.callActivityOnPause(Instrumentation.java:1334)
       at android.app.ActivityThread.performPauseActivity(ActivityThread.java:3388)
       at android.app.ActivityThread.performPauseActivity(ActivityThread.java:3361)
       at android.app.ActivityThread.handlePauseActivity(ActivityThread.java:3336)
       at android.app.ActivityThread.-wrap13(ActivityThread.java)
       at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1372)
       at android.os.Handler.dispatchMessage(Handler.java:102)
       at android.os.Looper.loop(Looper.java:148)
       at android.app.ActivityThread.main(ActivityThread.java:5443)
       at java.lang.reflect.Method.invoke(Method.java)
       at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:728)
       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)

我该如何解决?

android onbackpressed
2个回答
1
投票

尽管您有“关闭时”伪代码,但由于广告的缘故,当您致电onBackPressed()时,您的活动有时会暂停。活动暂停时无法调用onBackPressed()

在这种情况下您是否尝试过使用finish()?如果您打算关闭当前活动/片段,则也可以使用。


0
投票

为了避免后面崩溃,只需修改代码。您还可以在日志上获取实际的异常,并可以修改您的代码。但是,它不会使您的应用程序崩溃。

    public void onBackPressed() {

    try{
    if (showIntertitialAd())
                //pseudocodehere
               show ad
                ... on close -> super.onBackPressed();

            else
                super.onBackPressed();
    }catch(Exception ex){
    Log.e(ex.localizedmessage)
super.onBackPressed();
    }
        }
© www.soinside.com 2019 - 2024. All rights reserved.