GridView di immagini con ViewHolder più lenta che senza | Forum Android | AndroidWorld

ATTENZIONE:
L’Utente assume la totale responsabilità anche giuridica per ogni attività da lui svolta e per ogni contenuto pubblicato e/o scambiato. (leggi le condizioni d’uso).

Si invitano gli Utenti a non pubblicare o scambiare alcuna informazione che permetta di risalire, anche indirettamente, alla propria identità o all’identità di terzi (nome, cognome, residenza, email…) e divulgare alcun tipo di dato sensibile proprio o di terzi.

Gentile Utente,
desideriamo informarti che tutti i servizi sono erogati, agli stessi termini e condizioni, da Arnoldo Mondadori Editore S.p.A. quale società incorporante di Banzai Media S.r.l.

X
  1. #1
    Baby Android
    Registrato dal
    Jan 2014
    Residenza
    torino
    Dispositivo
    huawei asend g300
    Operatore
    Vodafone
    Messaggi
    26
    Grazie!
    2
    Ringraziato 0 volte in 0 post

    GridView di immagini con ViewHolder più lenta che senza

    Salve a tutti, sono alla mia prima app (come forse avrete notato, con tutte le domande che ho già inserito in questo forum) e quindi per ogni problema sbatto la testa contro il muro finché non mi decido a chiedere aiuto.

    Ho una GridView con immagini, e vorrei implementare il ViewHolder per migliorare le performance. Di seguito il codice.

    XML per le dimensioni della singola cella della griglia:
    codice:
    <ImageViewandroid:layout_width="wrap_content"
            android:layout_height="@dimen/grid_view_item_height"android:id="@+id/immagineGriglia"/>
    e il codice java dell'image adapter:
    codice:
    import android.app.Activity;import android.content.Context;
    import android.view.LayoutInflater;
    import android.view.View;
    import android.view.ViewGroup;
    import android.widget.ArrayAdapter;
    import android.widget.GridView;
    import android.widget.ImageView;
    import android.widget.TextView;
    
    import java.util.ArrayList;
    
    publicclassImageAdapterAdulti15extendsArrayAdapter{
        privateContext context;
        privateint layoutResourceId;
        privateArrayList data =newArrayList();
    
            // Keep all Images in array
        publicInteger[] mThumbIds ={
                R.drawable.image1, R.drawable.image2........
        };
    
        // Constructor
        publicImageAdapterAdulti15(Context context,int layoutResourceId,ArrayList data){
            super(context, layoutResourceId, data);
            this.layoutResourceId = layoutResourceId;
            this.context = context;
            this.data = data;
        }
    
        @Override
    
        publicView getView(int position,View convertView,ViewGroup parent){
            View cella = convertView;
            ViewHolder holder =null;
    
            if(cella ==null){
                LayoutInflater inflater =((Activity) context).getLayoutInflater();
                cella = inflater.inflate(layoutResourceId, parent,false);
                holder =newViewHolder();
                holder.immagineGriglia =(ImageView) cella.findViewById(R.id.immagineGriglia);
                cella.setTag(holder);
            }else{
                holder =(ViewHolder) cella.getTag();
            }
    
            ImageItem item =(ImageItem) data.get(position);
            holder.immagineGriglia.setImageBitmap(item.getImage());
            return cella;
        }
    
        staticclassViewHolder{
            ImageView immagineGriglia;     
        }}
    Come dicevo nel titolo, in questo modo la GridView risulta più lenta e con più tendenza a piantarsi per OutOfMemoryError rispetto alla stessa griglia senza ViewHolder.
    Direi quindi che il codice di cui sopra è sbagliato o incompleto.
    Sto avendo davvero difficoltà a capire non tanto il concetto di ViewHolder, quanto piuttosto il codice per farlo funzionare. Sapreste mica dirmi dove sbaglio?
    Grazie!

  2. #2
    Baby Android
    Registrato dal
    Jan 2014
    Residenza
    torino
    Dispositivo
    huawei asend g300
    Operatore
    Vodafone
    Messaggi
    26
    Grazie!
    2
    Ringraziato 0 volte in 0 post
    Ho provato a modificare questa riga del codice in questo modo:


    codice:
    ImageItem item = (ImageItem) data.get(position);
     holder.immagineGriglia.setImageDrawable(context.getResources().getDrawable(mThumbIds[position]));
     return cella;

    Ora la gridView scorre più fluida, ma mi sembra che causi qualche memory leak.
    ogni immagine è cliccabile, e il tocco porta a una pagina con una versione ingrandita e zoomabile della stessa immagine.
    Se tocco un'immagine funziona, ma dopo un po' di chiudi-apri-chiudi-apri si pianta. OutOfMemoryError.


    Su alcuni device, addirittura, (sto provando con diversi device emulati da Genimotion e due cellulari reali) non si apre proprio l'activity con la gridView, si pianta prima.
    Potrebbe essere un problema di memory leak? E' un argomento che per me è ancora abbastanza misterioso...
    Come posso capire dove sta il problema? So che esiste un'estensione per Eclipse per verificare l'uso della memoria, c'è qualcosa per Android Studio, visto che per il momento ho imparato a usare quello e vorrei evitare, almeno inizialmente, di incasinarmi ulteriormente imparando a usare un altro programma?

Discussioni simili

  1. Gridview: altezza celle adattabile allo schermo
    Da marcellino248 nel forum Sviluppo e Programmazione
    21-05-2015
    0Risposte
  2. elementi di una gridview appaiono in ordine casuale invece di quello deciso da me
    Da marcellino248 nel forum Sviluppo e Programmazione
    19-05-2015
    1Risposte
  3. E`possibile associare immagini a mittente sms senza numero?
    Da dangia nel forum Samsung Galaxy S III (i9300)
    29-08-2013
    0Risposte
  4. App Facebook Piu Lenta del browser
    Da Pazzerellox nel forum Samsung Galaxy Next (S5570)
    22-07-2011
    17Risposte
  5. Applicazione telefono più lenta in donut.
    Da antmancarella nel forum HTC Magic
    02-11-2009
    10Risposte

Segnalibri

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  

Search Engine Friendly URLs by vBSEO 3.6.1