Autore Topic: ripristino stato activity: Parcelable o non Parcelable?  (Letto 468 volte)

Offline Alexofalco

  • Nuovo arrivato
  • *
  • Post: 14
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy S Advance
  • Sistema operativo:
    2.3.6
ripristino stato activity: Parcelable o non Parcelable?
« il: 25 Novembre 2014, 18:55:46 CET »
0
Buonasera anddev.

Scusate se posto una richiesta di aiuto apparentemente banale ma ho difficoltà nel capire alcuni concetti.
Ho studiato attentamente diversi post simili nel forum, le soluzioni suggerite e soprattutto la documentazione ufficiale.
http://www.anddev.it/index.php/topic,12010.msg63134.html#msg63134
http://developer.android.com/training/basics/activity-lifecycle/recreating.html

Ecco il problema: devo ripristinare correttamente lo stato dell'activity nel caso in cui ruoto lo schermo. Il problema principale è che per adesso la mia applicazione è semplice e ho necessità di salvare solo un oggetto di una classe WorkerThread. Rappresenta un thread di lavoro, effettua calcoli e comunica con l'UI Thread, ovviamente implementa l'interfaccia Runnable. Ho pensato allora di implementare l'interfaccia Parcelable alla classe WorkerThread per poter salvare nel bundle dell'activity tutto il thread e ripristinarlo per intero... ma ho incontrato delle difficoltà. Principalmente la classe WorkerThread da me scritta contiene diversi parametri, alcuni sono primitivi altre no, primo tra tutti l'handler per la comunicazione con il UI Thread dell'activity. Leggendo nella documentazione android la classe Handler non è automaticamente parcellizabile quindi la domanda diventa spontanea: devo implementare Parcelable ovunque oppure c'è un modo di salvare un oggetto in modo più diretto?

Domanda più teorica: ha senso salvare e ripristinare tutto un oggetto (complesso che sia) oppure onSaveInstanceSaved(Bundle saved) è pensato per salvare e ripristinare solo i dati fortemente sensibili, primitivi e fondamentale per una totale ricostruzione da zero delle risorse con il metodo onRestoreInstanceSaved(Bundle saved)?

Grazie per l'aiuto, sono molto confuso su questo punto

Offline arlabs

  • Utente normale
  • ***
  • Post: 430
  • Respect: +49
    • Mostra profilo
  • Dispositivo Android:
    GalaxyS6, Nexus5
  • Play Store ID:
    AR Labs
  • Sistema operativo:
    Windows 10
Re:ripristino stato activity: Parcelable o non Parcelable?
« Risposta #1 il: 26 Novembre 2014, 11:04:16 CET »
0
Opinione personale:

E' bene strutturare l'applicazione con un architettura Document/View, dove ad Activity/Fragment assegno il compito di View.
I dati e le funzioni per gestirli li metto in altre classi che non devono venire distrutte e ricreate ogni volta che la View cambia. Queste classi possono creare un architettura quanto vuoi complessa ed essere detenute alla radice dall'Application o da un Singleton.

Così, ad un cambio di configurazione non devi serializzare e deserializzare tonnellate di roba. Giusto quello che è relativo all'interfaccia stessa (ad esempio l'elemento correntemente visualizzato di una lista)

Ciò non toglie che per un App banale, con pochi dati, tu non possa tenere tutto nell'Activity e serializzare le poche cose che ti servono.

Ciao.

Offline Alexofalco

  • Nuovo arrivato
  • *
  • Post: 14
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy S Advance
  • Sistema operativo:
    2.3.6
Re:ripristino stato activity: Parcelable o non Parcelable?
« Risposta #2 il: 26 Novembre 2014, 11:54:01 CET »
0
innanzitutto grazie per la risposta.

In effetti hai ragione: vengo principalmente da uno sviluppo Desktop in c# e ho ancora un ottica troppo statica dell'activity.
Sto già studiando il fragment ma attualmente preferisco non utilizzarlo in quanto vorrei limitare lo sviluppo di questo progetto didattico in pochi ma buoni concetti limitati.

Associare tutti i workerThread ad una classe Singleton mi sembra un idea vincente, almeno nel mio caso. Proverò questa strada, grazie mille.