Aktivität läuft langsam, mit ein paar Bildansicht-s
Ich habe eine Aktivität mit 4 Bilder insgesamt. Sie sind alle im Stil der Auflösung von 1080x1920 Gerät. Wenn ich die Aktivität mit diesen Bildern, die geladen werden, direkt in meine Tätigkeit über das XML, es läuft enorm langsam in meinem Genymotion emulator und lags auf einem echten Android-Gerät.
Hier ist das setup:
<android.support.design.widget.AppBarLayout
...>
<android.support.design.widget.CollapsingToolbarLayout
...>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="200dp"
android:orientation="vertical"
app:layout_collapseMode="parallax">
<ImageView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/imageView"
android:src="@drawable/shot_header"
android:scaleType="centerCrop" />
</LinearLayout>
<android.support.v7.widget.Toolbar
.../>
</android.support.design.widget.CollapsingToolbarLayout>
</android.support.design.widget.AppBarLayout>
Dem ersten Bild ist in einem CollapsingToolbarlayout. Die Auflösung des Bildes ist 1080x649 PNG.
Die content_activity:
Das Bild füllt den übergeordneten Breite.Es ist die Auflösung 1080x772 PNG.
<ImageView
android:layout_width="match_parent"
android:layout_height="250dp"
android:id="@+id/main_image"
android:layout_below="@+id/shot_error_field"
android:src="@drawable/forehand_midpng"
android:adjustViewBounds="true"
android:scaleType="centerCrop"
android:layout_marginTop="15dp"/>
Die anderen 2 Bilder sind in einem LinearLayout, Ihre Auflösung ist 500x399
<LinearLayout
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/main_image">
<ImageView
android:layout_width="150dp"
android:layout_height="150dp"
android:id="@+id/imageView3"
android:src="@drawable/forehand_mid_wrong"
android:layout_weight="1"/>
<View
android:layout_width="0dp"
android:layout_height="1dp"
android:layout_weight="1" >
</View>
<ImageView
android:layout_width="150dp"
android:layout_height="150dp"
android:id="@+id/imageView4"
android:src="@drawable/forehand_mid_wrong"
android:layout_weight="1"/>
</LinearLayout>
Zusammenfassen, ich habe eine Aktivität mit 4 ImageViews, gefüllt mit ausreichend dimensionierten Bilder, das sollte kein problem für ein modernes Android-Gerät. Das problem ist, dass diese Aktivität ausgeführt wird extrem langsam und hinken aufgrund des hohen Speicher-Verbrauch.
Mache ich etwas falsch? Wie kann ich weiter optimieren, Bilder?
Ich schaute in die anderen threads- out-of-memory-Problem aber keiner scheint zu schlagen eine Lösung für ein solches problem.
- Bildansicht in der Regel nicht, wie groß Bilder.
- Haben Sie versuchen mit
android:largeHeap="true"
? Dies ist nicht empfehlenswert, aber wenn nichts funktioniert, kann es hilfreich sein. - problem ist Bild-Auflösung.. freundlicherweise Größe
- Wenn Bildansicht doesen ' T wie die Bilder, wie ist die Facebook app noch läuft?
- wie man die Größe dynamisch für jedes Gerät?
- largeHeap kann nur verbergen das problem der Mangel an Arbeitsspeicher, aber wird nicht helfen, mit "lags" und "langsam"
- Sind Sie laden Bilder aus der URL oder aus Drawable.?
- Bilder werden geladen drawable
- hast du definieren Sie verschiedene Bilder für verschiedene Geräte-dp ? (Sie wissen, wie drawable-xhdp/ drawable-mdp)
- Noch Sie verwenden Piscao Bibliothek automatische Zwischenspeicherung
Du musst angemeldet sein, um einen Kommentar abzugeben.
Problem ist
resolution
von der Bild, wenn Sie könnenreduce resolution
des Bildes dann funktionieren, hier noch ein Beispiel für die Verringerungimage resolution
und Größe.Wenn Sie bitmap-Breite und Höhe, dann verwenden Sie folgende Funktion.
wenn Sie möchten, bitmap-Verhältnis gleich und reduzieren bitmap-Größe. dann übergeben Sie Ihre maximale Größe der bitmap. Sie können diese Funktion verwenden,
oder wenn Sie mit den drawable-Ressourcen verwenden dann diese Methode
resizeImage()
Methode gearbeitet perefctlyresizeImage()
Funktion Mann! Habe meine Tätigkeit mit einem riesigen hintergrund läuft super smooth jetzt.VERSUCHEN
machen Sie es einfach für Sie
Wenn Sie die Liste der Bild-urls, Durchlaufen Sie:
Code zum aktualisieren der Ansicht:
Versuchen facebook die fresco-Bibliothek. Es kann mit großen Bildern und einem meiner Projekte, reduziert den Speicherverbrauch über 50%.
Eigentlich sollte dies kein Problem sein und diese Bilder sind nicht so groß, machen Sie Ihr Telefon laggy. Werfen Sie einen Blick auf die anderen Sachen, die Sie in der Anwendung, es ist möglich, es gibt einige schwere Operationen (wie DB-schreib - /Leseoperation, API-Anfragen) direkt im UI-thread.
Wenn es keine solche Operationen, und Sie sehen, wie Probleme mit der perfomance, versuchen Sie diese Bilder über einige Bibliotheken, wie z.B. Picasso.
Gradle Abhängigkeit:
Und der code wird wie folgt Aussehen:
Picasso.with(this).load(R.drawable.my_image).into(toolbar);