2015-09-08 22 views
6

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

4

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.

+0

"Yeni oluşturulan görünümü eklemenin bir yolu olmalısın" nasıl yapmalı? Cevabınız için thx çok fazla –

+1

@MethnaniBilel çözmek için karmaşık bir sorun ... çözmek için nasıl mosta ve/veya nucles bir göz atın. – LordRaydenMK

1

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:

Sizin Activity
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ığı

  1. . Activity'u (Fragments'u kullanmaya karar verdiğinizde) Presenter numaranıza dokunmadan değiştirebilirsiniz.

  2. 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üz Mockito.

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.

+1

mView'iniz, LoginActivity'nin güçlü bir referansıdır. – Ricardo

İlgili konular