Autore Topic: Aggiornare GridView con base adapter con thread in background  (Letto 804 volte)

Offline walterc

  • Nuovo arrivato
  • *
  • Post: 6
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    smartpad s2
  • Sistema operativo:
    windows 7
Aggiornare GridView con base adapter con thread in background
« il: 17 Febbraio 2015, 11:48:06 CET »
0
Buongiorno,
utilizzo eclipse e API18 e ho appena iniziato lo sviluppo di applicazioni android.
La mia applicazione comunica in wifi (o USB) con una scheda esterna che mi ritorna dei valori che voglio poi far vedere su un'activity che è creata con una gridview con un baseadapter. Possono esserci fino a 254 celle con 5 textview per ogni cella.
Io ho creato 2 asynctask (trasmissione e ricezione). Funziona tutto correttamente ma quando voglio aggiornare i dati con la risposta ricevuta dalla scheda esterna ci vuole molto tempo (ho provato con notifyDataSetChanged()). E' possibile aggiornare il tutto velocemente? Questo perchè io lavoro in lettura e scrittura continua.
Ho provato anche con gli handler ma il problema è lo stesso, per aggiornare il tutto ci vogliono diversi secondi.


Grazie 1000
Buona giornata

Online tonno16

  • Utente storico
  • *****
  • Post: 1200
  • Respect: +58
    • Mostra profilo
  • Dispositivo Android:
    moto g
  • Play Store ID:
    Diego Tonini
  • Sistema operativo:
    OpenSuse
Re:Aggiornare GridView con base adapter con thread in background
« Risposta #1 il: 17 Febbraio 2015, 12:57:37 CET »
0
Dovresti aggiornare solo le righe interessate.

Per lentezza intendi il caricamento delle informazioni sugli item o intendi lo scroll lento della greed?

Offline walterc

  • Nuovo arrivato
  • *
  • Post: 6
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    smartpad s2
  • Sistema operativo:
    windows 7
Re:Aggiornare GridView con base adapter con thread in background
« Risposta #2 il: 17 Febbraio 2015, 13:01:39 CET »
0
Ciao,
per lentezza intendo che quando lancio il notifyDataSetChanged()... la comunicazione tx/rx si ferma per n. secondi in attesa che l'activity si aggiorni. Per cambiare solo le righe cosa intendi? Io ho una griglia con n celle in x e n celle in y.

Grazie 1000

Online tonno16

  • Utente storico
  • *****
  • Post: 1200
  • Respect: +58
    • Mostra profilo
  • Dispositivo Android:
    moto g
  • Play Store ID:
    Diego Tonini
  • Sistema operativo:
    OpenSuse
Re:Aggiornare GridView con base adapter con thread in background
« Risposta #3 il: 17 Febbraio 2015, 13:04:05 CET »
0
Io usavo thread in greedview per caricare delle foto da internet. Se anche ci metto 2 secondi per 5 foto e per caricarne 50 ce ne metti 20, intendo dire che comunque lo scrool della greedview rimaneva fluido e le icone ancora non caricate vengono rimpiazzate con un immagine di placeholder

Offline walterc

  • Nuovo arrivato
  • *
  • Post: 6
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    smartpad s2
  • Sistema operativo:
    windows 7
Re:Aggiornare GridView con base adapter con thread in background
« Risposta #4 il: 17 Febbraio 2015, 13:08:07 CET »
0
Il mio problema è che essendo in lettura continua devo avere i dati in real time perchè cambiano molto velocemente... un valore che mi torna è ad esempio una tensione letta da una cella che quindi cambia ogni n millisecondi... e io dovrei riuscire a farla vedere ogni.. almeno 200-300 millisecondi...

Grazie

Online tonno16

  • Utente storico
  • *****
  • Post: 1200
  • Respect: +58
    • Mostra profilo
  • Dispositivo Android:
    moto g
  • Play Store ID:
    Diego Tonini
  • Sistema operativo:
    OpenSuse
Re:Aggiornare GridView con base adapter con thread in background
« Risposta #5 il: 17 Febbraio 2015, 13:35:05 CET »
0
Magari ti conviene un grafico?

Offline walterc

  • Nuovo arrivato
  • *
  • Post: 6
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    smartpad s2
  • Sistema operativo:
    windows 7
Re:Aggiornare GridView con base adapter con thread in background
« Risposta #6 il: 17 Febbraio 2015, 13:39:00 CET »
0
Ciao,
no un grafico non va bene... io in ogni cella ho le seguenti informazioni:
Check di selezioni
N° dipositivo
Valore parametro 1
Valore parametro 2

e in ogni cella valore parametro 1 e 2 possono riferirsi a due cose totalmente differenti.

Grazie

Offline arlabs

  • Utente normale
  • ***
  • Post: 430
  • Respect: +49
    • Mostra profilo
  • Dispositivo Android:
    GalaxyS6, Nexus5
  • Play Store ID:
    AR Labs
  • Sistema operativo:
    Windows 10
Re:Aggiornare GridView con base adapter con thread in background
« Risposta #7 il: 17 Febbraio 2015, 19:09:17 CET »
0
Stai dicendo che devi aggiornare 254 * 5 textview * 4 volte al secondo?

Secondo me devi disaccoppiare il problema. Devi avere un thread in background che ti legge i dati remoti e li cacha in locale, e devi aggiornare a video solo le View visibili attingendo ai dati cachati.
L'aggiornamento credo tu lo possa fare tranquillamente nel thread UI.

Ciao.

Post unito: [time]17 Febbraio 2015, 19:14:34 CET[/time]
La GridView ricicla le singole View. Se, tramite l'adapter, nella View metti un tag che riferisce la cella che ti interessa, puoi ogni volta scandire tutte le View visibili ed aggiornarne i valori.
Puoi scatenare l'aggiornamento semplicemente con un postDelayed ogni tot ms oppure con un evento dal thread che legge i dati. Stai attento ad evitare eventi uguali che si accodano.
« Ultima modifica: 17 Febbraio 2015, 19:15:03 CET da arlabs »

Offline walterc

  • Nuovo arrivato
  • *
  • Post: 6
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    smartpad s2
  • Sistema operativo:
    windows 7
Re:Aggiornare GridView con base adapter con thread in background
« Risposta #8 il: 18 Febbraio 2015, 08:12:36 CET »
0
Grazie,
oggi/domani provo.
Buona giornata

Offline arlabs

  • Utente normale
  • ***
  • Post: 430
  • Respect: +49
    • Mostra profilo
  • Dispositivo Android:
    GalaxyS6, Nexus5
  • Play Store ID:
    AR Labs
  • Sistema operativo:
    Windows 10
Re:Aggiornare GridView con base adapter con thread in background
« Risposta #9 il: 18 Febbraio 2015, 09:58:40 CET »
0
Mi viene un dubbio, a prescindere dal fare il recupero dei dati in background. Quando dici di aggiornare cosa fai, ricrei un nuovo ArrayAdapter (non so, usi quello?) e lo ripassi alla GridView oppure semplicemente aggiorni i valori all'interno dell'Array? Potrebbe essere molto più pesante la prima della seconda... non so esattamente come lavora la notifyDataSetChanged. Ma sicuramente se l'Adapter cambia la View non ha modo di ottimizzare l'aggiornamento, se l'Adapter rimane lo stesso potrebbe farlo.

Offline walterc

  • Nuovo arrivato
  • *
  • Post: 6
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    smartpad s2
  • Sistema operativo:
    windows 7
Re:Aggiornare GridView con base adapter con thread in background
« Risposta #10 il: 18 Febbraio 2015, 10:16:20 CET »
0
Ciao,
io ho provato sia a ricreare l'adapter e riassegnarlo alla gridview... che a modificare solo i text view del baseadapter... ma entrambi sono molto lenti... sicuramente sono io a sbagliare.
Io ho 2 processi asynctask uno per tx che quando ha finito (onPostExecute) fa partire l'asynctask dell'rx. Qui mi memorizzo i dati in una classe che all'interno ha le mie stringhe che vorrei far vedere a schermo. Ricevuti i dati, nel onPostExecute dell'rx faccio ripartire il tx per richiedere i nuovi dati.
Se non gli lascio il tempo necessario non mi fa vedere i valori a schermo, se invece gli lascio il tempo... i processo successivo di tx non parte fino a che non ha aggiornato la grafica.
Grazie