Domanda

Ho rivisto alcuni post su caricamento pigro ma credo che il mio problema è un po 'diverso.

Ho una galleria (la mia classe estende Gallery) che espone 20 invece di grandi immagini di dimensioni (400-500K ciascuno). Io non li riesco a caricare di galleria da ottengo un'eccezione OutOfMemory.
Così, ho creato un array di 20 drawable e inizialmente popolato i primi 9 elementi (le immagini provenienti dal Web) e impostare tutto il resto nullo. La mia intenzione era questa: su un flirt a destra, recuperare elemento no. 10 e insieme all'elemento nullo n. 0. In un'altra gettare l'elemento giusto prendere no. 11 e insieme all'elemento nullo n. 1 a nullo. Stessa logica su un flirt sinistra.

Il problema è che posso scagliare molto più veloce rispetto agli elementi vengono recuperati. La mia galleria ha una BaseAdapter e la sua GetView () simile a questa:

public View getView(int position, View  convertView, ViewGroup  parent){
     ImageView imageView = new ImageView();
     imageView.setDrawable(imageArray[position];
     ....
     ....

     return imageView;
}

Come faccio a dire GetView () - se imageArray [posizione] è ancora nullo, mostrano un "loading ..." di dialogo e una volta che è impostato ripetere te stesso con la stessa posizione
? Non voglio vedere l'ImageView vuota e quindi impostare al volo. Voglio non essere in grado di vedere l'ImageView a tutti fino a quando non viene impostato.

Grazie.

È stato utile?

Soluzione

Galleria è stato progettato per l'esperienza liscio. Sarà molto male interfaccia utente se si blocca lo schermo e non si passa alla immagine successiva fino a quando non viene recuperata. Questo utente modo non sarà in grado di lanciare a tutti. Si dovrebbe visualizzare alcuni indicatori di carico invece di immagine durante il caricamento.

Credo che lo scenario è piuttosto comune. Si dovrebbe scaricare le immagini e visualizzarle. Se si ottiene OutOfMemory si può provare a immagini sovracampiona Strano di problema di memoria, mentre caricamento di un'immagine di un oggetto bitmap .

Se c'è ancora OutOfMemory è necessario rimuovere le bitmap dalla memoria e li memorizzare nella cache a SD. Così, quando scaglia utente retro è possibile caricare le immagini da SD di nuovo, sarà abbastanza veloce. E il consumo di memoria sarà inferiore. Come lei suggerisce è possibile avere 10 immagini più recenti memorizzate nella cache in memoria e altri memorizzati nella cache su SD.

Si può dare un'occhiata al mio codice di esempio pigro carico di immagini in ListView . In realtà si tratta di un adattatore ListView ma è possibile applicarlo a galleria con piccole modifiche. Penso che farà esattamente quello che ti serve.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top