2015-09-03 17 views
13

Tôi đang hiển thị quảng cáo chuyển khi người dùng nhấn lại để thoát khỏi ứng dụng:Không thể thực hiện hành động này sau khi onSaveInstanceState trên 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 
    } 
} 

Đây là báo cáo tai nạn tôi đã nhận được từ người dùng của tôi:

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) 

tôi hiểu rằng nó được kích hoạt khi người dùng đóng quảng cáo, nhưng tại sao nó chết trên super.onBackPressed()?

+2

Bạn đã nhận được giải pháp của sự cố chưa? Tôi đang chạy đến vấn đề tương tự. – Manisha

Trả lời

3

Bạn có thể thấy dấu vết ngăn xếp cho thấy lỗi do FragmentManagerImpl.popBackStackImmediate gây ra.

Điều này chỉ tương tự như onActivityResult, có vẻ như khi bạn hiển thị quảng cáo trung gian, hoạt động của bạn được tạm dừng và khi onAdClosed(), ứng dụng của bạn chưa được tiếp tục.

Để giải quyết điều đó, bạn có thể cố gắng đặt cờ trong onAdClosed() và gọi onBackPressed() trong onResume() nếu cờ được bật.

13

Bạn không thể gọi số onBackPressed() khi hoạt động của bạn bị tạm dừng. Tuy nhiên, hành vi trên báo chí lại là để lại hoạt động. Chỉ cần gọi finish() thay vì onBackPressed().

Bạn nên đảm bảo trong ghi đè của onBackPressed() rằng hoạt động sẽ kết thúc. Trở lại có thể được ép vì các lý do khác.

+2

Nhưng tại sao Android gọi onBackPressed khi hoạt động bị tạm dừng? Ý tôi là, tôi không gọi phương thức này một mình, vì vậy nó phải được gọi khi người dùng nhấn nút quay lại. –

Các vấn đề liên quan