2015-09-03 18 views
13

jestem wyświetlając reklamy pełnoekranowej, gdy użytkownik naciśnie z powrotem, aby zamknąć aplikację:Nie można wykonać tę czynność po onSaveInstanceState na super.onBackPressed()

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 
    } 
} 

To jest raport awarii otrzymałem od moich użytkowników:

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) 

rozumiem, że to jest wyzwalany, gdy użytkownik zamyka reklamę, ale dlaczego on umarł na super.onBackPressed()?

+2

Czy otrzymałeś rozwiązanie problemu? Biegnę do podobnego problemu. – Manisha

Odpowiedz

3

Możesz zobaczyć ślad stosu pokazujący, że błąd jest spowodowany przez FragmentManagerImpl.popBackStackImmediate.

To jest podobne do onActivityResult, wydaje się, gdy wyświetlasz reklamę pełnoekranową, działanie zostaje wstrzymane, a kiedy onAdClosed() Twoja aplikacja nie jest jeszcze wznowiona.

Aby rozwiązać ten problem, spróbuj ustawić flagę pod numerem onAdClosed() i wywołać onBackPressed() w onResume(), jeśli flaga jest włączona.

13

Nie możesz zadzwonić pod numer onBackPressed(), gdy aktywność jest wstrzymana. Jednak zachowanie na back press jest opuszczenie działania. Wystarczy zadzwonić pod numer finish() zamiast onBackPressed().

Powinieneś upewnić się w swoim nadpisaniu, że aktywność zostanie zakończona. Plecy można naciskać z innych powodów.

+2

Ale dlaczego Android wywołuje funkcjęBackPressed, gdy aktywność jest wstrzymana? Chodzi mi o to, że nie nazwałam tej metody samodzielnie, więc musi ona zostać wywołana, gdy użytkownik kliknie przycisk "Wstecz". –

Powiązane problemy