Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

interstitial error android unable to pause activity

I have one issue with interstitial ads . I am getting error unable to pause activity when I am trying to handle onAdClosed() method

Here I am using fragments

Here I am posting my logcat output

03-18 19:28:50.169: E/AndroidRuntime(26349): FATAL EXCEPTION: main
03-18 19:28:50.169: E/AndroidRuntime(26349): java.lang.RuntimeException: Unable to pause  
activity {com.social_sweep.app/com.google.android.gms.ads.AdActivity}:
java.lang.IllegalStateException: Can not perform this action after onSaveInstanceState

03-18 19:28:50.169: E/AndroidRuntime(26349):at
android.app.ActivityThread.performPauseActivity(ActivityThread.java:2846)

03-18 19:28:50.169: E/AndroidRuntime(26349): at
android.app.ActivityThread.performPauseActivity(ActivityThread.java:2802)
03-18 19:28:50.169: E/AndroidRuntime(26349): at
android.app.ActivityThread.handlePauseActivity(ActivityThread.java:2780)
03-18 19:28:50.169: E/AndroidRuntime(26349):at
android.app.ActivityThread.access$800(ActivityThread.java:133)
 03-18 19:28:50.169: E/AndroidRuntime(26349):at
android.app.ActivityThread$H.handleMessage(ActivityThread.java:1220)
03-18 19:28:50.169: E/AndroidRuntime(26349):at
android.os.Handler.dispatchMessage(Handler.java:99)
03-18 19:28:50.169: E/AndroidRuntime(26349):    at
android.os.Looper.loop(Looper.java:137)
03-18 19:28:50.169: E/AndroidRuntime(26349):    at
android.app.ActivityThread.main(ActivityThread.java:4794)
03-18 19:28:50.169: E/AndroidRuntime(26349):    at
java.lang.reflect.Method.invokeNative(Native Method)
03-18 19:28:50.169: E/AndroidRuntime(26349):    at
java.lang.reflect.Method.invoke(Method.java:511)
03-18 19:28:50.169: E/AndroidRuntime(26349):    at
com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:789)
03-18 19:28:50.169: E/AndroidRuntime(26349):    at
com.android.internal.os.ZygoteInit.main(ZygoteInit.java:556)
03-18 19:28:50.169: E/AndroidRuntime(26349):    at
dalvik.system.NativeStart.main(Native Method)
03-18 19:28:50.169: E/AndroidRuntime(26349): Caused by: java.lang.IllegalStateException:
Can not perform this action after onSaveInstanceState
03-18 19:28:50.169: E/AndroidRuntime(26349):    at
android.app.FragmentManagerImpl.checkStateLoss(FragmentManager.java:1280)
03-18 19:28:50.169: E/AndroidRuntime(26349):    at
android.app.FragmentManagerImpl.enqueueAction(FragmentManager.java:1291)
03-18 19:28:50.169: E/AndroidRuntime(26349):    at
android.app.BackStackRecord.commitInternal(BackStackRecord.java:548)
03-18 19:28:50.169: E/AndroidRuntime(26349):    at
android.app.BackStackRecord.commit(BackStackRecord.java:532)
03-18 19:28:50.169: E/AndroidRuntime(26349):    at
com.social_sweep.app.SelectEvent$3$1.onAdClosed(SelectEvent.java:461)
03-18 19:28:50.169: E/AndroidRuntime(26349):    at
com.google.android.gms.internal.t.onAdClosed(Unknown Source)
03-18 19:28:50.169: E/AndroidRuntime(26349):    at
com.google.android.gms.internal.ab$a.onTransact(Unknown Source)
03-18 19:28:50.169: E/AndroidRuntime(26349):    at
android.os.Binder.transact(Binder.java:326)
android.os.Binder.transact(Binder.java:326)
03-18 19:28:50.169: E/AndroidRuntime(26349):    at
com.google.android.gms.internal.bs$a$a.onPause(Unknown Source)
03-18 19:28:50.169: E/AndroidRuntime(26349):    at
com.google.android.gms.ads.AdActivity.onPause(Unknown Source)
03-18 19:28:50.169: E/AndroidRuntime(26349):    at
android.app.Activity.performPause(Activity.java:5219)
03-18 19:28:50.169: E/AndroidRuntime(26349):    at
android.app.Instrumentation.callActivityOnPause(Instrumentation.java:1225)
03-18 19:28:50.169: E/AndroidRuntime(26349):    at
android.app.ActivityThread.performPauseActivity(ActivityThread.java:2833)
03-18 19:28:50.169: E/AndroidRuntime(26349):    ... 12 more

Here is my code what I am doing ,

 if (fragment != null) {
             interstitial.setAdListener(new AdListener() {

             public void onAdLoaded() {

             displayInterstitial();

             }

             public void onAdClosed() {
            FragmentManager fragmentManager = getFragmentManager();
            fragmentManager
                    .beginTransaction()
                    .setCustomAnimations(R.animator.slide_in_left,
                            R.animator.slide_out_right,
                            R.animator.slide_in_left,
                            R.animator.slide_out_right)
                    .replace(R.id.frame_container, fragment)..commitAllowingStateLoss();

            // update selected item and title, then close the
            // drawer

            getActivity().getActionBar().setTitle(Title);
             };

             });

Thanks in advance.

like image 798
Ando Masahashi Avatar asked Feb 21 '26 22:02

Ando Masahashi


1 Answers

The error you are getting is due to your attempting to perform your Fragment manipulation AFTER #onSaveInstanceState has been called on your Activity. Ie your Activity has been stopped and possibly destroyed, undoubtedly because the Ad Activity has been displayed. When the Ad is closed your Activity will be restarted (possibly even recreated), so do whatever UI manipulation you want at that point.

On a side note:

DO NOT call displayInterstitial from AdListener#onAdLoaded.

This will provide a really poor user experience as well as cause you mountains of problems with ads showing up when you least expect them such as after existing your Activity.

Instead call DisplayInterstitial at a natural break point in your app.

like image 72
William Avatar answered Feb 24 '26 11:02

William



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!