我的应用程序发生了一个非常奇怪的错误。
为了显示插页式广告,我重写了某些活动的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)
我该如何解决?
尽管您有“关闭时”伪代码,但由于广告的缘故,当您致电onBackPressed()
时,您的活动有时会暂停。活动暂停时无法调用onBackPressed()
。
在这种情况下您是否尝试过使用finish()
?如果您打算关闭当前活动/片段,则也可以使用。
为了避免后面崩溃,只需修改代码。您还可以在日志上获取实际的异常,并可以修改您的代码。但是,它不会使您的应用程序崩溃。
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();
}
}