2015-09-03 14 views
13

ich eine Interstitial-Anzeige am anzeigt, wenn der Benutzer wieder drückt die Anwendung zu beenden:Diese Aktion kann nicht nach onSaveInstanceState auf super.onBackPressed durchführen()

mInterstitialAd.setAdListener(new AdListener() { 
    @Override 
    public void onAdClosed() { 
     onBackPressed(); //line 98 
    } 
}); 

requestNewInterstitial(); 

private void requestNewInterstitial() { 
    AdRequest adRequest = new AdRequest.Builder().build(); 
    mInterstitialAd.loadAd(adRequest); 
} 

@Override 
public void onBackPressed() { 
    if (mInterstitialAd.isLoaded()) { 
     mInterstitialAd.show(); 
    } else { 
     super.onBackPressed(); //line 410 
    } 
} 

Dies ist der Crash-Bericht ich von meinen Nutzern erhalten:

java.lang.RuntimeException: Unable to pause activity {com.myapp/com.google.android.gms.ads.AdActivity}: java.lang.IllegalStateException: Can not perform this action after onSaveInstanceState 
at android.app.ActivityThread.performPauseActivity(ActivityThread.java:3088) 
at android.app.ActivityThread.performPauseActivity(ActivityThread.java:3043) 
at android.app.ActivityThread.handlePauseActivity(ActivityThread.java:3021) 
at android.app.ActivityThread.access$1000(ActivityThread.java:138) 
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1253) 
at android.os.Handler.dispatchMessage(Handler.java:102) 
at android.os.Looper.loop(Looper.java:149) 
at android.app.ActivityThread.main(ActivityThread.java:5045) 
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:794) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:610) 
at dalvik.system.NativeStart.main(Native Method) 
Caused by: java.lang.IllegalStateException: Can not perform this action after onSaveInstanceState 
at android.app.FragmentManagerImpl.checkStateLoss(FragmentManager.java:1323) 
at android.app.FragmentManagerImpl.popBackStackImmediate(FragmentManager.java:493) 
at android.app.Activity.onBackPressed(Activity.java:2215) 
at com.myapp.MainActivity.onBackPressed(MainActivity.java:410) 
at com.myapp.MainActivity$1.onAdClosed(MainActivity.java:98) 
at com.google.android.gms.ads.internal.client.zzc.onAdClosed(Unknown Source) 
at com.google.android.gms.ads.internal.client.zzm$zza.onTransact(Unknown Source) 
at android.os.Binder.transact(Binder.java:361) 
at com.google.android.gms.ads.internal.client.l.a(SourceFile:109) 
at com.google.android.gms.ads.internal.a.n(SourceFile:645) 
at com.google.android.gms.ads.internal.b.t(SourceFile:351) 
at com.google.android.gms.ads.internal.t.t(SourceFile:141) 
at com.google.android.gms.ads.internal.overlay.ab.n(SourceFile:672) 
at com.google.android.gms.ads.internal.overlay.ab.i(SourceFile:408) 
at com.google.android.gms.ads.internal.overlay.a.d.onTransact(SourceFile:86) 
at android.os.Binder.transact(Binder.java:361) 
at com.google.android.gms.internal.zzdj$zza$zza.onPause(Unknown Source) 
at com.google.android.gms.ads.AdActivity.onPause(Unknown Source) 
at android.app.Activity.performPause(Activity.java:5335) 
at android.app.Instrumentation.callActivityOnPause(Instrumentation.java:1233) 
at android.app.ActivityThread.performPauseActivity(ActivityThread.java:3074) 

ich verstehe, dass es ausgelöst wird, wenn der Benutzer die Anzeige schließt, aber warum es auf super.onBackPressed() stirbt?

+2

Haben Sie eine Lösung des Problems gefunden? Ich laufe auf ähnliches Problem. – Manisha

Antwort

3

Sie können den Stack-Trace sehen, der zeigt, dass der Fehler von FragmentManagerImpl.popBackStackImmediate verursacht wird.

Dies ist nur ähnlich zu onActivityResult, scheint, wenn Sie die Interstitial-Anzeige zeigen, wird Ihre Aktivität in die Pause versetzt, und wenn onAdClosed(), Ihre App ist noch nicht wieder aufgenommen.

Um das zu lösen, können Sie versuchen, ein Flag in onAdClosed() zu setzen, und onBackPressed() in onResume() aufrufen, wenn das Flag aktiviert ist.

13

Sie können onBackPressed() nicht aufrufen, wenn Ihre Aktivität pausiert ist. Das Verhalten auf einem Backpress ist jedoch, die Aktivität zu verlassen. Rufen Sie einfach finish() anstelle von onBackPressed().

Sie sollten in Ihrer onBackPressed() Überschreibung sicherstellen, dass die Aktivität beendet wird. Zurück kann aus anderen Gründen gedrückt werden.

+2

Aber warum ruft AndroidBackPressed auf, wenn die Aktivität pausiert ist? Ich meine, ich habe diese Methode nicht selbst aufgerufen, also muss sie aufgerufen werden, wenn der Benutzer den Zurück-Knopf drückt. –

Verwandte Themen