Parceler: parcellizzare dati velocemente su Android

Parcellizzare i dati su Android è un’operazione lunga e macchinosa ma fortunatamente esistono delle librerie che velocizzano il tutto: ad esempio Parceler!
Spesso, quando si sviluppa un’applicazione Android, ci si trova nella situazione di dover passare degli oggetti da una Activity ad un’altra. Tipicamente si arriva ad un bivio: utilizzo la serializzazione che è veloce da implementare a scapito delle performance o utilizzo la parcellizzazione che è lunga da implementare e mantenere ma ha ottime performance?

Ehi, so cosa hai pensato! Vuoi scrivere quel implements Serializable, ma sapevi che ogni volta che viene scritto uno sviluppatore Android muore? Scherzi a parte, è risaputo che è lungo e noioso scrivere tutta l’implementazione di Parcelable e mantenerla aggiornata per tutto il ciclo di vita dell’applicazione ma è l’unico modo per non uccidere un dispositivo Android quando si vuole passare un oggetto molto grande. L’utilizzo del Parcelable è nettamente più veloce della classica serializzazione offerta da Java (leggi qui).

Ecco che entra in gioco Parceler (qui il repository ufficiale) una libreria che aiuta a superare questo problema rendendo la parcellizzazione semplice, veloce ed automatica a patto di rispettare delle semplici regole.

Fondamentalmente le regole da rispettare sono:

  • Aggiungere la notazione @Parcel alla classe
  • Deve essere presente un costruttore pubblico senza parametri
  • I campi devono essere pubblici

Ma vediamo ora come configurare ed utilizzare questa comoda libreria.
Per prima cosa è necessario modificare il build.gradle del progetto aggiungendo la seguente riga alle dependencies del buildscript:

Otterremo un risultato come il seguente:

Adesso è il turno del build.gradle del modulo della nostra applicazione, dovremo aggiungere le seguenti righe alle dependencies:

Anche in questo caso otterremo un risultato del genere:

Benissimo, ora non ci resta altro che sincronizzare Gradle per scaricare la libreria ed integrarla nella nostra applicazione.

Fatto ciò possiamo scrivere una classe che sarà parcellizzabile assicurandoci di rispettare le regole che ci siamo posti prima, ecco un esempio:

A questo punto è tutto pronto! Per poter parcellizzare e deparcellizzare l’oggetto in questione ci basterà utilizzare la classe Parcels, che ci mette a disposizione Parceler, mediante i suoi metodi wrap ed unwrap.

Per parcellizzare l’oggetto utilizzeremo Parcels.wrap(object), ad esempio:

Mentre per deparcellizzare un oggetto utilizzeremo Parcels.unwrap(parcelledObject), ad esempio:

Semplice, vero? Ovviamente questa è solo una semplice dimostrazione, nella realtà Parceler permette di fare molto di più, ma vi invito a visitare il sito dello sviluppatore per avere maggiori informazioni.

Per l’occasione ho preparato anche un repository su GitHub con un progetto di esempio pronto all’uso, lo potete trovare al seguente link.