2011-11-10 23 views
10

HoneyComb için bir projem var ve ana Etkinliğimde onResum() yönteminde recreate() yöntemini kullandıktan sonra bir hata alıyorum.Yeniden oluşturulduktan sonra yeniden başlatılmayan etkinliğin gerçekleştirilmesi yöntemi

11-10 22:05:42.090: E/ActivityThread(1917): Performing pause of activity that is not  resumed: {com.blogspot.honeyapp/com.blogspot.honeyapp.Main} 
11-10 22:05:42.090: E/ActivityThread(1917): java.lang.RuntimeException: Performing pause of activity that is not resumed: {com.blogspot.honeyapp/com.blogspot.honeyapp.Main} 
11-10 22:05:42.090: E/ActivityThread(1917):  at android.app.ActivityThread.performPauseActivity(ActivityThread.java:2517) 
11-10 22:05:42.090: E/ActivityThread(1917):  at android.app.ActivityThread.performPauseActivity(ActivityThread.java:2505) 
11-10 22:05:42.090: E/ActivityThread(1917):  at android.app.ActivityThread.handlePauseActivity(ActivityThread.java:2483) 
11-10 22:05:42.090: E/ActivityThread(1917):  at android.app.ActivityThread.access$700(ActivityThread.java:122) 
11-10 22:05:42.090: E/ActivityThread(1917):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1031) 
11-10 22:05:42.090: E/ActivityThread(1917):  at android.os.Handler.dispatchMessage(Handler.java:99) 
11-10 22:05:42.090: E/ActivityThread(1917):  at android.os.Looper.loop(Looper.java:132) 
11-10 22:05:42.090: E/ActivityThread(1917):  at android.app.ActivityThread.main(ActivityThread.java:4123) 
11-10 22:05:42.090: E/ActivityThread(1917):  at java.lang.reflect.Method.invokeNative(Native Method) 
11-10 22:05:42.090: E/ActivityThread(1917):  at java.lang.reflect.Method.invoke(Method.java:491) 
11-10 22:05:42.090: E/ActivityThread(1917):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:841) 
11-10 22:05:42.090: E/ActivityThread(1917):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:599) 
11-10 22:05:42.090: E/ActivityThread(1917):  at dalvik.system.NativeStart.main(Native Method) 

Size neler olduğunu göstermek için yeni bir proje oluşturuyorum.

Sen benim hatam ne olduğunu bilmiyorum ama Aktivite başlayıp etkinlik'ın yaşam döngüsünü log http://xp-dev.com/svn/RecreateError/trunk/

kısmında bulabilirsiniz. Sonuç: Şimdi

11-10 22:26:45.960: I/seasons log(2274): onCreate() 
11-10 22:26:45.990: I/seasons log(2274): onStart() 
11-10 22:26:45.990: I/seasons log(2274): onResume() 

Ben

11-10 22:30:26.390: I/seasons log(2274): onPause() 
11-10 22:30:27.080: I/seasons log(2274): onStop() 

... Eylem Çubuğu Simge Tekrar Oluştur bayrağını etkinleştirmek ve diğer uygulamasına değiştirmeye basın Ve yapılır ne aktive Tekrar Oluştur bayrağıyla benim Faaliyet dönmek onResume() öğesinde recreate().

11-10 22:33:05.500: I/seasons log(2274): onCreate() 
11-10 22:33:05.510: I/seasons log(2274): onStart() 
11-10 22:33:05.510: I/seasons log(2274): onResume() 
11-10 22:33:05.510: I/seasons log(2274): onPause() 

onPause? Ama benim faaliyetim görünür, ne yapıyorum yanlış? Doğru durumResume() üzerinde değil mi?

Ve şimdi başka bir uygulamaya geçersem hata alırım.

Zaman ayırdığınız için teşekkürler ve kötü İngilizce'm için özür dilerim.


Şu anda File Manager HD gibi uygulamaların bu eylemi nasıl gerçekleştirdiğini anlamıyorum.

İki Etkinlik: Ana Etkinlik A, Ana içerik olarak PreferenceFragment ile B Aktivitesi. Holo ve Holo.Light arasındaki temasını değiştirir

Bir seçenek, bir OnSharedPreferenceChangeListener PreferenceFragment içinde yöntemle ama biz onResume() başarısız at Ana Aktivite recreate() yönteme geri geldiğinizde, bu nasıl yapılacağını ile B Etkinliği değişiklikler?

Özürlü olduğum için. Afedersiniz.

cevap

0

Sorunlarınızın sebebinin bu olup olmadığını bilmiyorum, ancak Java'daki gibi bu dizeleri karşılaştırmıyorsunuz; Bunun yerine, if ("S".equals(recreate)) kullanın.

+0

Ups. Gerçek uygulamada bu kod mevcut değil ama teşekkür ederim. Benim için büyük bir hata. – seasonsend

0

onPause onCreate onResume vs 'yi asla aramamalısınız. Yapmak istediğiniz şey için recreate()'u kullanmanız gerekmemelidir, güncelleme kodunun güncellenmesi gerekiyorsa başka bir yere koyun. Ayrıca, bir dize yerine programın durumunu depolamak için bir tamsayı kullanın, sonra referans vermek için bazı son değişkenleri bildirin.

public final int RECREATE_ON = 1; 
public final int RECREATE_OFF = 2; 
private int recreate = RECREATE_OFF; 

... 

if(recreate==RECREATE_ON){ 
    recreate(); 
} 

yapıyor) (şeyi yeniden yaratmak hatırlayın:

Nedeni bu Aktivite yeni bir örneği ile yeniden oluşturulması.Bu, yapılandırma değişikliğinden dolayı Etkinlik oluşturulduğunda olduğu gibi esas itibariyle aynı akışta sonucunu verir - geçerli örneği, yaşam döngüsünü onDestroy()'a ve bundan sonra oluşturulan yeni bir örneğe gider.

Bu nedenle, iletisini alıyorsunuz.

Handler handler = new Handler() { 
     @Override 
     public void handleMessage(Message msg) { 
      if(msg.what==MSG_RECREATE) 
       recreate(); 
     } 
}; 

@Override 
protected void onResume() { 
    if(condition) { 
     Message msg = handler.obtainMessage(); 
     msg.what = MSG_RECREATE; 
     handler.sendMessage(msg); 
    } 
} 

Bu artık çökme olmaz: Bunu yapmak için

+1

Kendi aramda, onCreate, onResume'yi aramadım. Ama yoy yeniden yaratılmaya haklı. Bunu, bir PreferenceFragment üzerinde holo ve Holo.light arasındaki temayı değiştirdiğimde ve değişiklikleri görmek için geri döndüğümde etkinliği yeniden oluşturmanız gerektiğinden, bunu benim uygulamamda kullanıyorum. – seasonsend

+1

Başkalarının neye ihtiyacı olduğuna karar vermemelisiniz. Eğer bir çözüm bilmiyorsanız, cevap vermeyin. – Michael

3

, bir işleyici kullanın.

+4

"super.onResume()' :) 'i çağırmazsanız hala çökeceğine inanıyorum. – nicopico

İlgili konular