SORU
19 EYLÜL 2011, PAZARTESİ


özel durum "ben İllegalStateException: onSaveİnstanceState" sonra;bu eylemi gerçekleştirmek mümkün değil

Ben Canlı bir Android uygulaması ve pazar var alınan aşağıdaki yığın izleme ve hiçbir fikrim yok neden oluyor gibi olmaz uygulama kodu ama kendinizi neden bazı veya diğer olay uygulama (varsayım)

Parçaları kullanarak değilim, hala FragmentManager bir başvuru yok. Herhangi bir vücut bazı gizli gerçekleri üzerine ışık, bu tür bir sorunu önlemek için atabilir:

java.lang.IllegalStateException: Can not perform this action after onSaveInstanceState
at android.app.FragmentManagerImpl.checkStateLoss(FragmentManager.java:1109)
at android.app.FragmentManagerImpl.popBackStackImmediate(FragmentManager.java:399)
at android.app.Activity.onBackPressed(Activity.java:2066)
at android.app.Activity.onKeyDown(Activity.java:1962)
at android.view.KeyEvent.dispatch(KeyEvent.java:2482)
at android.app.Activity.dispatchKeyEvent(Activity.java:2274)
at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchKeyEvent(PhoneWindow.java:1668)
at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1112)
at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1112)
at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1112)
at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1112)
at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1112)
at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1112)
at com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchKeyEvent(PhoneWindow.java:1720)
at com.android.internal.policy.impl.PhoneWindow.superDispatchKeyEvent(PhoneWindow.java:1258)
at android.app.Activity.dispatchKeyEvent(Activity.java:2269)
at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchKeyEvent(PhoneWindow.java:1668)
at android.view.ViewRoot.deliverKeyEventPostIme(ViewRoot.java:2851)
at android.view.ViewRoot.handleFinishedEvent(ViewRoot.java:2824)
at android.view.ViewRoot.handleMessage(ViewRoot.java:2011)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:132)
at android.app.ActivityThread.main(ActivityThread.java:4025)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:491)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:841)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:599)
at dalvik.system.NativeStart.main(Native Method)  

CEVAP
21 NİSAN 2012, CUMARTESİ


Bu şimdiye kadar karşılaştığım en aptalca hata. Bir ben vardıFragmentuygulama mükemmel çalışıyorAPI < 11veForce Closing.

Gerçekten saveInstance, çağrı Activity yaşam döngüsü içinde değiştirdiler ne olduğunu anlayamadım ama ben burada bu çözdüm :

@Override
protected void onSaveInstanceState(Bundle outState) {
    //No call for super(). Bug on API Level > 11.
}

Ben sadece 9* *için arama yapmayın ve her şey mükemmel çalışıyor. Bu sana biraz zaman kazandırır umarım.

DÜZENLEME:biraz daha araştırma yaptıktan sonra bu bug destek bilinen bir pakettir.

Eğer örneğini kaydedin ve 10* Bundle *senin için bir şey eklemek istiyorsanız aşağıdaki gibi kullanabilirsiniz :

@Override
protected void onSaveInstanceState(Bundle outState) {
    outState.putString("WORKAROUND_FOR_BUG_19917_KEY", "WORKAROUND_FOR_BUG_19917_VALUE");
    super.onSaveInstanceState(outState);
}

EDİT2:bu da eğer Activity planda gittikten sonra işlemi yapmaya çalışıyorsanız oluşabilir. Bunu önlemek için commitAllowingStateLoss() kullanmalısınız

EDİT3:Çözüm yukarıdaki ilk destek sorunları tespit edildi.hatırladığım kadarıyla v4 kütüphaneler. Ama eğer hala bu ile ilgili sorunlar varsaGEREKİRayrıca okuma @AlexLockwood 's blog : Fragment Transactions & Activity State Loss

Blog yazısı (ama ben şiddetle okumanı tavsiye) Özet :

  • ASLAPost-Petek pre-Petek, onPause() onStop() sonra commit() hareketleri
  • Activity içine işleyen hareketleri yöntemleri ömrü dikkatli olun.KullanınonCreate(), onResumeFragments() onPostResume()
  • Zaman uyumsuz geri arama yöntemleri içinde sahne hareketleri önlemek
  • commitAllowingStateLoss() sadece son çare olarak kullanın

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • jbignacio

    jbignacio

    13 Mart 2006
  • Just So

    Just So

    3 HAZİRAN 2007
  • MotoManTV

    MotoManTV

    10 Aralık 2009