In mvp speichern wir diese Referenz einer Aktivität in einer schwachen Referenz. WeakReference<Activity> view = new WeakReference<Activity>(activity);
Wenn wir die Referenz verlieren. Können wir es zurückbekommen?Android MVP WeakRefrence
Antwort
Wenn Sie den Verweis auf Ihre Activity
verlieren, bedeutet dies, dass die Aktivität wurde Müll gesammelt und es existiert nicht mehr. Sie können nicht zurück, was nicht existiert.
Ex. Wenn dies aufgrund einer Konfigurationsänderung geschieht, bedeutet dies, dass ein neuer activity
erstellt wurde.
Sie benötigen eine Möglichkeit, die neu erstellte Ansicht an denselben Präsentator anzuhängen. Wenn Sie nach Bibliotheken suchen, die Ihnen helfen, sehen Sie sich mosby und nucleus an.
Ich glaube nicht, dass Sie eine Referenz auf eine Activity
in MVP
überhaupt speichern sollten - egal, ob es hart oder schwach ist!
Ich gehe davon aus, dass Sie diese Referenz in der Presenter
speichern. Um die Schichten wirklich zu entkoppeln, sollten Sie eine Schnittstelle erstellen, die Ihre View
(Activity
) beschreibt und sie anstelle der Aktivität verwenden.
So würden Sie tun:
public interface LoginView {
displayUsernameError(String error);
displayPasswordError(String error);
openMainScreen();
}
Ihre Activity
sollte die Schnittstelle von oben implementieren.
public class LoginActivity implements LoginView {
...
}
In Ihrem Moderator müssten Sie:
class LoginPresenter {
private LoginView mView;
public LoginPresenter(LoginView view) {
mView = view;
}
public onLoginButtonClicked(String username, char[] password) {
...
mView.openMainScreen();
}
}
Sofortiger Nutzen, dies zu tun:
Die verschiedenen Schichten wirklich entkoppelt sind. Sie können Ihre
Activity
ändern (sagen Sie, dass Sie stattdessenFragments
verwenden möchten), ohne IhrePresenter
zu berühren.Ihr Präsentator ist nur mit
JUnit
vollständig testbar! Keine Notwendigkeit, irgendetwas zu verwenden, um zu überprüfen, ob Ihre Interaktionen korrekt sind, einfachMockito
, um dieLoginView
zu verspotten.
Ein weiterer Punkt zu beachten - sind Sie sicher, dass Sie Ihre Presenter
Ihre View
zu überleben? Es gibt einige Situationen, in denen das nicht vermieden werden kann, aber in den meisten Fällen haben sie die gleiche Lebensdauer - wenn die View
zerstört wird, sollte die Presenter
auch sein.
Ihr mView ist eine starke Referenz von LoginActivity. – Ricardo
"Sie benötigen eine Möglichkeit, die neu erstellte Ansicht anzuhängen" wie geht das? thx so viel für Ihre Antwort –
@MethnaniBilel es ist ein komplexes Problem zu lösen ... werfen Sie einen Blick auf Mosby und/oder nuclees zu sehen, wie sie es gelöst haben. – LordRaydenMK