In mvp salviamo il riferimento di un'attività in un riferimento debole. WeakReference<Activity> view = new WeakReference<Activity>(activity);
Se perdiamo il riferimento. possiamo riaverlo?Android MVP WeakRefrence
risposta
Se si perde il riferimento al proprio Activity
, significa che l'attività è stata raccolta e non esiste più. Non puoi recuperare ciò che non esiste.
Es. Se ciò accade a causa di modifiche alla configurazione, significa che è stato creato un nuovo activity
.
È necessario un modo per allegare la vista appena creata allo stesso relatore.
Se cerchi librerie che ti aiutino, dai un'occhiata a mosby e nucleus.
Non penso che dovresti salvare un riferimento a Activity
in MVP
- non importa se è difficile o debole!
Suppongo che stiate memorizzando questo riferimento nel Presenter
. Per disaccoppiare realmente i livelli è necessario creare un'interfaccia che descriva il tuo View
(Activity
) e utilizzarlo al posto dell'attività.
Quindi faresti:
public interface LoginView {
displayUsernameError(String error);
displayPasswordError(String error);
openMainScreen();
}
tuo Activity
dovrebbe implementare l'interfaccia dall'alto.
public class LoginActivity implements LoginView {
...
}
Nel vostro presentatore avreste:
class LoginPresenter {
private LoginView mView;
public LoginPresenter(LoginView view) {
mView = view;
}
public onLoginButtonClicked(String username, char[] password) {
...
mView.openMainScreen();
}
}
benefici immediati di fare questo:
I diversi strati sono davvero disaccoppiati. Puoi cambiare il tuo
Activity
(ad esempio, decidi di usareFragments
) senza toccare il tuoPresenter
.Il presentatore è completamente testabile solo con
JUnit
! Non è necessario utilizzare alcunché di fantasia per verificare che le interazioni siano corrette, semplicementeMockito
per simulare ilLoginView
.
Un altro punto da notare - sei sicuro che vuoi che il tuo Presenter
a sopravvivere tuo View
? Ci sono alcune situazioni in cui questo non può essere evitato, ma nella maggior parte dei casi hanno la stessa durata - quando lo View
viene distrutto dovrebbe essere lo Presenter
.
Il tuo mView è un riferimento forte di LoginActivity. – Ricardo
"È necessario un modo per allegare la vista appena creata" come fare? grazie mille per la tua risposta –
@MethnaniBilel è un problema complesso da risolvere ... dai un'occhiata a mosby e/o nucles per vedere come hanno risolto. – LordRaydenMK