Autore Topic: Ridimensionamento delle immagini  (Letto 1058 volte)

Offline ITobeI

  • Nuovo arrivato
  • *
  • Post: 12
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    LG Optimus G
  • Sistema operativo:
    Windows 7/Ubuntu 12
Ridimensionamento delle immagini
« il: 07 Marzo 2014, 16:04:28 CET »
0
Salve a tutti,

Ho una app da migliorare soprattuto sotto il punto di vista delle prestazioni. E' un' app che visualizza tante immagini attraverso gridLayout . Il punto è questo: ogni immagine viene visualizzata in diverse dimensioni ( almeno due-tre ). Per fare questo ho creato tramite script lo scalamento dell' immagine. E' possibile che il ridimensionamento dell' immagini tramite script faccia rallentare l' app? Per una prestazione migliore, è meglio avere immagini uguali con dimensioni adatte senza dover fare il ridimensionamento o mantenere lo script di scalamento ?


Offline bradipao

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 4043
  • keep it simple
  • Respect: +567
    • Github
    • Google+
    • bradipao
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5
  • Play Store ID:
    Bradipao
  • Sistema operativo:
    W7
Re:Ridimensionamento delle immagini
« Risposta #1 il: 09 Marzo 2014, 09:24:48 CET »
0
Il rallentamento lo hai perchè presumibilmente fai fare tutte le operazioni nel thread di UI. Se è così, quello che dovresti fare è ristrutturare quella parte per essere gestita da un thread parallelo.
NON rispondo a domande nei messaggi privati
Bradipao @ Play Store

Offline ITobeI

  • Nuovo arrivato
  • *
  • Post: 12
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    LG Optimus G
  • Sistema operativo:
    Windows 7/Ubuntu 12
Re:Ridimensionamento delle immagini
« Risposta #2 il: 09 Marzo 2014, 12:00:07 CET »
0
l' aggiunta delle immagini nella gridView e il ridimensionamento avvengono nella classe AsyncTask. Al limite potrei avere più classi asyncTask che svolgono ruoli differenti esempio: una ha il ruolo per il caricmento dell' immagine e una per il ridimensionamento. Possibile?
Quindi tu pensi che il ridimensionamento non sia il problema del rallentamento dell' app? ( le immagini non vengono prese da un server ma sono archiviate in un file zip localmente quindi dovrebbe essere a maggior ragione più veloce ).

Offline bradipao

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 4043
  • keep it simple
  • Respect: +567
    • Github
    • Google+
    • bradipao
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5
  • Play Store ID:
    Bradipao
  • Sistema operativo:
    W7
Re:Ridimensionamento delle immagini
« Risposta #3 il: 09 Marzo 2014, 12:10:58 CET »
0
Quindi tu pensi che il ridimensionamento non sia il problema del rallentamento dell' app?

A questo punto dipende cosa intendi per rallentamento. Se il rallentamento è nella prontezza dell'interfaccia, vuol dire che in qualche modo stai gravando sul thread di UI. Se invece il rallentamento è nel tempo necessario al caricamento delle immagini finali (attraverso l'asynctask che citi), non c'è molto da fare, è il normale funzionamento atteso.

Comunque i tools per il debug avanzato delle app ti consentono di ispezionare persino a livello di funzione dove la tua app consuma il tempo di cpu. Prova a darci un'occhiata.
NON rispondo a domande nei messaggi privati
Bradipao @ Play Store

Offline ITobeI

  • Nuovo arrivato
  • *
  • Post: 12
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    LG Optimus G
  • Sistema operativo:
    Windows 7/Ubuntu 12
Re:Ridimensionamento delle immagini
« Risposta #4 il: 09 Marzo 2014, 12:45:46 CET »
0
Si scusami, rallentamento nel caricamento delle immagini nella gridView. Essendo un' app che visualizza un numero abbastanza elevato di immagini è normale che bisogna dargli il tempo dovuto, ma penso che sia troppo elevato.

Avevo pensato di utilizzare un thread che si occupi del caricamento dell immagine e che , una volta caricata, chiama un altro thread per il ridimensionamento ( attualmente queste due operazioni lo fa un unico asynctask ). Questo potrebbe velocizzare? o aggiungere troppi thread rischia di peggiorare?

Citazione
Comunque i tools per il debug avanzato delle app ti consentono di ispezionare persino a livello di funzione dove la tua app consuma il tempo di cpu. Prova a darci un'occhiata.

Grazie per l' informazione

Offline FrancescoAndroid

  • Utente junior
  • **
  • Post: 69
  • Respect: +1
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5
  • Play Store ID:
    GiMiSiS Interactive
  • Sistema operativo:
    Android 2.3.3
Re:Ridimensionamento delle immagini
« Risposta #5 il: 11 Marzo 2014, 16:00:47 CET »
0
ma queste immagini sono sempre le stesse o cambiano in base a parametri di ricerca?

Offline ITobeI

  • Nuovo arrivato
  • *
  • Post: 12
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    LG Optimus G
  • Sistema operativo:
    Windows 7/Ubuntu 12
Re:Ridimensionamento delle immagini
« Risposta #6 il: 11 Marzo 2014, 23:06:54 CET »
0
Le immagini dono molte e diverse. Ognuna di queste può essere visualizzata con dimensioni diverse ( esempio :lista immagini con una gridview e poi se uno clicca su una immagine quest' ultima viene vista a tutto schermo )

Offline FrancescoAndroid

  • Utente junior
  • **
  • Post: 69
  • Respect: +1
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5
  • Play Store ID:
    GiMiSiS Interactive
  • Sistema operativo:
    Android 2.3.3
Re:Ridimensionamento delle immagini
« Risposta #7 il: 12 Marzo 2014, 12:32:33 CET »
0
Le immagini dono molte e diverse. Ognuna di queste può essere visualizzata con dimensioni diverse ( esempio :lista immagini con una gridview e poi se uno clicca su una immagine quest' ultima viene vista a tutto schermo )

Nel caso in cui non siano tantissime mi viene in mente che potresti fare del pre-processing, ad esempio su un server esterno. Cosi facendo avresti pronte una gamma di copie della stessa immagine e a seconda del tipo di schermo scarichi quella corretta.

Va da se che se le immagini sono veramente tante o variano rapidamente ciò potrebbe non avere senso, anche se spesso conviene sfruttare un server (sicuramente più rapido di uno smartphone) per fargli fare il lavoro duro.


Offline ITobeI

  • Nuovo arrivato
  • *
  • Post: 12
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    LG Optimus G
  • Sistema operativo:
    Windows 7/Ubuntu 12
Re:Ridimensionamento delle immagini
« Risposta #8 il: 12 Marzo 2014, 17:48:20 CET »
0
quindi fare utilizzare più thread come ho detto nei post precedenti è inutile? c' avevo pensato a far fare il lavoro al server e quindi fornire all' app tutte le immagini con varie dimensioni ( in base al dispositivo ).

Grazie mille a tutti per le vostre risposte

Offline FrancescoAndroid

  • Utente junior
  • **
  • Post: 69
  • Respect: +1
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5
  • Play Store ID:
    GiMiSiS Interactive
  • Sistema operativo:
    Android 2.3.3
Re:Ridimensionamento delle immagini
« Risposta #9 il: 13 Marzo 2014, 11:43:19 CET »
0
quindi fare utilizzare più thread come ho detto nei post precedenti è inutile? c' avevo pensato a far fare il lavoro al server e quindi fornire all' app tutte le immagini con varie dimensioni ( in base al dispositivo ).

Grazie mille a tutti per le vostre risposte

per fare chiarezza:

se usi dei thread asincroni (ad es. asyncktask) che non sono bloccanti dal punto di vista grafico e fai l'elaborazione sullo smartphone potrebbe andare bene lo stesso. Devi stare attento a lanciarne più d'uno di modo che appena hai qualche immagine pronta la visualizzi.

Svantaggio: peccato che non tutti gli smartphone hanno mega processori e componenti grafiche da reggere un carico di lavoro elevato

se usi una elaborazione server (ovvio che il processo che gestisce la chiamata a server deve essere sempre un asynck task) invece riduci di molto i tempi e sopratutto li rendi abbastanza simili a prescindere dalle diverse componenti hardware dei telefoni.

Svantaggio: se le immagini hanno una qualità alta ci vuole molto tempo prima che l'immagine arrivi al telefono.

io ti consiglio la seconda opzione, non è mai bene sfruttare la cpu dei telefoni per lavori troppo "duri".


Offline ITobeI

  • Nuovo arrivato
  • *
  • Post: 12
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    LG Optimus G
  • Sistema operativo:
    Windows 7/Ubuntu 12
Re:Ridimensionamento delle immagini
« Risposta #10 il: 14 Marzo 2014, 20:34:53 CET »
0
Citazione
per fare chiarezza:

se usi dei thread asincroni (ad es. asyncktask) che non sono bloccanti dal punto di vista grafico e fai l'elaborazione sullo smartphone potrebbe andare bene lo stesso. Devi stare attento a lanciarne più d'uno di modo che appena hai qualche immagine pronta la visualizzi.

Svantaggio: peccato che non tutti gli smartphone hanno mega processori e componenti grafiche da reggere un carico di lavoro elevato

se usi una elaborazione server (ovvio che il processo che gestisce la chiamata a server deve essere sempre un asynck task) invece riduci di molto i tempi e sopratutto li rendi abbastanza simili a prescindere dalle diverse componenti hardware dei telefoni.

Svantaggio: se le immagini hanno una qualità alta ci vuole molto tempo prima che l'immagine arrivi al telefono.



Grazie mille per la risposta esaustiva :)

Citazione
io ti consiglio la seconda opzione, non è mai bene sfruttare la cpu dei telefoni per lavori troppo "duri".

Infatti questa era la mia prima intenzione. Penso che farò fare tutto lato server :)

Grazie a tutti per le risposte