Informazioni sull'utilizzo del pattern MVP in Android

3

Nei miei attuali progetti Android sto usando un db sqlite per archiviare le mie raccolte di dati strutturati. Si accede al database con una ContentProvider chiamata da un Loader che aggiorna l'interfaccia utente.

Sembra che la mia app sia ora un pezzo di codice vecchio stile, dal momento che RxJava è diventato uno standard di uso frequente, la popolarità del pattern MVP è aumentata in quanto fornisce maggiore affidabilità alle applicazioni.

Dopo alcune letture ho capito che Model è il luogo in cui sono archiviati i dati e la business logic, Presenter recupera i dati e li dà alla View, e infine la View è quasi vuota, chiama solo Presenter per richiedere i dati e visualizzarli.

Una delle caratteristiche di Presenter dovrebbe essere che esiste anche dopo che la vista si ferma, il che significa che quando viene ricreata una Activity (ad es. rotazione dello schermo) i dati sono ancora lì e non è necessario caricarli di nuovo, ma vedo che in tutte le guide il presentatore viene creato nel metodo onCreate di Activity , questo significa che viene sempre creato un nuovo presentatore.

Mi manca qualcosa?

    
posta Vektor88 27.02.2016 - 15:49
fonte

1 risposta

2

Per quanto ho capito, la memorizzazione di Presenter indica oltre Activity di cicli attivi nella parte inferiore avviene con le vecchie modalità. Sono almeno:

Tutti hanno bisogno di un meccanismo di parcellizzazione o serializzazione.

Ecco un articolo illuminante su questo argomento:

link

Nella penultima parte, l'autore mostra un ciclo di vita contenente un cambiamento di orientamento:

Activity is initially created (let’s call this instance one)

  • New Presenter is created
  • Presenter is bound to the Activity

User clicks on the download button

  • Long running operation starts in the Presenter

Orientation changes

  • Presenter is unbound from the first instance of the Activity
  • First instance of the Activity has no reference, is available for garbage collection
  • Presenter is retained, long running operation continues
  • Second instance of the Activity is created
  • Second instance of the Activity is bound to the same Presenter Download finishes
  • Presenter updates its view (the second instance of the Activity) accordingly

L'autore ha scritto un esempio di codice contenente un PresenterManager . Questo è qui:

link

Vediamo la parte essenziale:

...
import com.google.common.cache.Cache;
...
private final Cache<Long, BasePresenter<?, ?>> presenters;
...
public void savePresenter(BasePresenter<?, ?> presenter, Bundle outState) {
    long presenterId = currentId.incrementAndGet();
    presenters.put(presenterId, presenter);
    outState.putLong(SIS_KEY_PRESENTER_ID, presenterId);
}

Per me, rimane il nostro compito avere il Presenter persistente. Nell'evento create , come hai detto, prendiamo le loro istanze e le usiamo.

    
risposta data 27.02.2016 - 16:53
fonte

Leggi altre domande sui tag