2016-04-05 9 views
1

Bunu nasıl yapıyorsunuz? Yapılandırma değiştiğinde Sunumları nasıl koruyorsunuz?MVP'yi uygularken Android'de Sunum Yapanlar'ı korumak için en iyi uygulamalar nelerdir?

Başka bir soru: Fragmanlardan/Etkinliklerden ayrılırken Sunum yapanları korumak mümkün mü?

Mosby veya Nucleus gibi MVP için çerçeve kullanmayı düşünmüyorum, ancak Mosby'nin yolu mümkün olan en iyi yaklaşım değildir. Kullanıcı Arabirimi ile parçalarda Fragment.setRetainInstance (true) kullanılması, SO'da bulunan birçok yayına göre kullanılmamalıdır, aynı zamanda backstack ile kullanılmamalıdır. Belki daha iyi bir yolu var mı?

cevap

2

Nucleus dahili olarak statik bir Harita kullanır. Aslında Nucleus, bir sunum yapan tarafından bir sunum yapan bir kullanıcıya icra edilen bir Request (rxjava) 'dan daha fazla bir eşleme yapar. Bu, çekirdeğin Presenter örneğini korumayacağı, ancak Talebi (RxJava) koruduğu ve yeni sunucuya yeniden iliştirildiği anlamına gelir.

Mosby 2.0, Fragments'ın saklanmasını veya sunumları tutmak için lastNonConfiguration yöntemini kullanır. Kullanıcı arabirimi olan parçaları saklamakla ilgili bir sorun yok. Parçayı tutan tek dezavantaj, onları arka yığına koyamayacağınızdır. Mosby 3.0'da (SNAPSHOT kullanılabilir, ancak backstack üzerinde henüz uygulanmadı) tüm sunumcular barındırma etkinlikleri yaşam döngüsüne bağlı bir Haritaya kaydedilecektir. Bu, Presenter'ın backstack'de geri almayan parçalar için saklanabileceği anlamına gelir. Nucleus'un tersine, yalnızca Faaliyetler yaşam döngüsü boyunca veya kullanıcı tarafından geri çekilmeden kaldırılırlar (navigasyon). Ayrıca bu, Mosby 3.0'ın da özel görünümleri (FrameLayout vb.) Desteklemesini sağlar.

is it possible to preserve Presenters when navigating away from Fragment/Activity? 

Evet, ama neden gereklidir? Görünüm hiç görünmüyorsa, sunucuyu gerçekten tutmaya gerek var mı? Yine de, hem Nucleus hem de Mosby bunu yapabilir.

+0

sorunu, setRetainInstance (true) kullanırken ve fragmanlar arasındaki animasyon geçişini kullanırken bellek sızıntısı (LeakCanary tarafından algılandı) aldım. SetRetainInstance (false) ayarlandığında, bellek sızıntısı olmaz. Presenter'ı Moselle'de setRetainInstance (true) kullanmadan koruyabilir miyim? – SuitUp

+0

Bellek sızıntısı, Fragmanı veya Frant.onViewDestroyed() içindeki Fragmanınızın (geçişler, ClickListenler vb. Gibi) referanslarını, Mosby veya sunum yapan kişi tarafından değil, düzgün bir şekilde temizlememenizdir. Henüz Mosby 2.0'da mümkün değil ama 3.0'da desteklenecek (yaklaşık bir ay içinde piyasaya sürülecek). Ancak, Mosby 2.0 Presenter'da yeniden başlatılabilir. Check-in, Mosby'nin ViewState belgeleri. – sockeqwe

+0

Bu durumu temizler. Artık bir sonraki projemde fantastik kütüphanenizi kullanmama sebep yok! Çok teşekkür ederim! – SuitUp

İlgili konular