mvp'de, bir etkinliğin referansını zayıf bir referansta kaydediyoruz. Referansı kaybedersek WeakReference<Activity> view = new WeakReference<Activity>(activity);
. geri alabilir miyiz?Android MVP WeakRefrence
cevap
Activity
numaranızın referansını kaybederseniz, etkinlik çöp toplandı demektir ve artık mevcut değildir. Var olmayan bir yere geri dönemezsin.
Ex. Bu, yapılandırma değişikliği nedeniyle gerçekleşirse, yeni bir activity
oluşturulduğu anlamına gelir.
Yeni oluşturulmuş görünümü aynı sunucuya eklemenin bir yolu var.
Size yardımcı olacak kütüphaneler arıyorsanız, mosby ve nucleus numaralı telefonlara göz atın.
MVP
için bir başvuru kaydetmeniz gerektiğini hiç sanmıyorum - zor veya zayıf olup olmadığı önemli değil!
Bu başvuruyu Presenter
numaralı belgede sakladığınızı varsayıyorum. Katmanları gerçekten ayrıştırmak için, View
(Activity
) 'nuzu açıklayan bir arayüz oluşturmalı ve bunu etkinlik yerine kullanmalısınız.
Yani yaparım:
SizinActivity
public interface LoginView {
displayUsernameError(String error);
displayPasswordError(String error);
openMainScreen();
}
yukarıdan arabirimini uygulamalıdır. sizin sunucu olarak
public class LoginActivity implements LoginView {
...
}
ederdiniz: Bunu yapmanın
class LoginPresenter {
private LoginView mView;
public LoginPresenter(LoginView view) {
mView = view;
}
public onLoginButtonClicked(String username, char[] password) {
...
mView.openMainScreen();
}
}
Acil faydalar: Farklı katmanlar gerçekten ayrıştırıldığı
.
Activity
'u (Fragments
'u kullanmaya karar verdiğinizde)Presenter
numaranıza dokunmadan değiştirebilirsiniz.Sunucunuz sadece
JUnit
kullanarak tamamen test edilebilir! Sizin etkileşimlerinizi doğrulamak için herhangi bir şey fantezi kullanmanıza gerek yok,alay için sadece düzMockito
.
Bir diğer nokta dikkat - Eğer senin Presenter
sizin View
uzun yaşamak istediğinden emin misin? Önlenemediğinde bazı durumlar vardır, ancak çoğu durumda aynı ömürleri vardır - View
imha edildiğinde Presenter
da olmalıdır.
mView'iniz, LoginActivity'nin güçlü bir referansıdır. – Ricardo
"Yeni oluşturulan görünümü eklemenin bir yolu olmalısın" nasıl yapmalı? Cevabınız için thx çok fazla –
@MethnaniBilel çözmek için karmaşık bir sorun ... çözmek için nasıl mosta ve/veya nucles bir göz atın. – LordRaydenMK