Ho riscontrato ciò che posso solo classificare come perdita di memoria per gli elementi ScrollView quando si utilizza il componente Galleria.L'aggiunta di una semplice ScrollView alla Galleria causa una perdita di memoria
Un breve sfondo. Ho un'app esistente che è un'app per slideshow di foto. Utilizza il componente Galleria, ma ogni elemento nell'adattatore viene visualizzato a schermo intero. (la fonte completa è disponibile a this link)
L'elemento Vista scheda è costituito da un ImageView e due TextViews per titolo e descrizione. Poiché le foto hanno una risoluzione piuttosto elevata, l'app utilizza molta memoria, ma in genere la Galleria riesce a riciclarle bene.
Tuttavia, quando ora sto implementando una ScrollView per la descrizione TextView, ho quasi subito problemi di memoria. Questo l'unico cambiamento che ho fatto
<ScrollView
android:id="@+id/description_scroller"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:scrollbars="vertical"
android:fillViewport="true">
<TextView
android:id="@+id/slideshow_description"
android:textSize="@dimen/description_font_size"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="@color/white"
android:layout_below="@id/slideshow_title"
android:singleLine="false"
android:maxLines="4"/>
</ScrollView>
ho fatto un heap dump e chiaramente potrebbe vedere che era la Scrollview che era la radice dei problemi di memoria.
Ecco due schermate dall'analisi dell'heap dump. Si noti che lo ScrollView mantiene un riferimento a mParent che comprende la foto di grandi dimensioni che uso
PS stesso problema si verifica se uso lo scorrimento del TextView (Android: barre di scorrimento = "verticale" e .setMovementMethod (nuova ScrollingMovementMethod());
PSS provato lo spegnimento della cache disegno persistente, ma non dreaandroid diverso: persistentDrawingCache = "none"
Impressionante, questo sembra aver risolto la perdita di memoria. Tuttavia, non riesco a scorrere automaticamente TextView. Questo è il codice che sto cercando di usare slideshowDescription.setText (slideshowPhoto.getDescription()); Scroller scroller = new Scroller (context); slideshowDescription.setScroller (scroller); Scroller .computeScrollOffset(); descrizione intBottom = slideshowDescription.getBottom(); scroller.startScroll (slideshowDescription.getScrollX(), slideshowDescription.getScrollY(), 0, descriptionBottom, 400); – dparnas
Sembra che stavo correndo nel famigerato problema con altezza e altre proprietà non inizializzate e quindi aveva il valore 0. Dovrebbe essere in grado di codificare tutto ciò. Grazie – dparnas
Questo approccio non ha funzionato, ma ho trovato una soluzione alternativa che pubblicherò – dparnas