插页式广告有一个问题。尝试处理onAdClosed()
方法时出现无法暂停活动的错误
在这里我正在使用片段
我在这里发布我的logcat输出
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
这是我正在执行的代码,
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);
};
});
提前致谢。
您收到的错误是由于尝试在Activity上调用#onSaveInstanceState之后执行片段操作而导致的。也就是说,您的活动已停止,并且有可能被破坏,这无疑是因为已显示广告活动。广告关闭后,您的“活动”将重新启动(甚至可能会重新创建),此时您想要执行的任何UI操作都可以进行。
附带说明:
不要从AdListener#onAdLoaded调用displayInterstitial。
这会带来非常差的用户体验,并且会给您带来很多问题,例如,在您拥有“活动”之后,您最不希望看到的广告出现。
而是在应用程序的自然断点处调用DisplayInterstitial。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句