2017-02-11 6 views
1

Hallo Ich habe ziemlich einfach Code meine Bilder sind alle komprimiert, so dass niemand mehr als 50kb hat. Wenn ich meine App starte, wird 1 Bild geladen und die Speicherauslastung beträgt ungefähr 42 MB. Wenn ich jedoch zu einem anderen Bild blättere, kann jedes andere Bild eine Speicherauslastung von bis zu 250 MB verursachen. Wie man es repariert? Hier ist mein Code und bitte ich bin Anfänger, versuchen Sie es einfach zu erklären.Bilder zu viel Speicher

import android.content.Context; 
import android.support.v4.view.PagerAdapter; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.ImageView; 


public class CustomSwip extends PagerAdapter { 
private int[] imageResources = {R.drawable.j1, R.drawable.jg2,R.drawable.jg3, R.drawable.jg4, R.drawable.jg5, R.drawable.jg6, R.drawable.jg7, R.drawable.jg8, R.drawable.jg9, R.drawable.jg10, R.drawable.jg11, R.drawable.jg12, R.drawable.jg13, R.drawable.jg14, R.drawable.jg15, R.drawable.jg16}; 
private Context ctx; 
private LayoutInflater layoutInflater; 

public CustomSwip(Context c) { 
    ctx = c; 
} 

@Override 
public int getCount() { 

    return imageResources.length; 
} 


@Override 
public Object instantiateItem(ViewGroup container, int position) { 
    layoutInflater = (LayoutInflater) ctx.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
    View itemView = layoutInflater.inflate(R.layout.activity_custom_swip, container, false); 
    ImageView imageView = (ImageView) itemView.findViewById(R.id.swip_image_view); 
    imageView.setImageResource(imageResources[position]); 
    container.addView(itemView); 
    return itemView; 
} 


@Override 
public void destroyItem(ViewGroup container, int position, Object object) { 

} 


@Override 
public boolean isViewFromObject(View view, Object object) { 

    return (view == object); 
} 

} 
+1

Verwenden Sie 'Glide' oder' Picasso' Bibliothek zum Herunterladen/Zwischenspeichern von Bildern. –

+0

Was meinen Sie mit Speichernutzung? Ist es der Speicher für Ihre App in Ihrem Gerätespeicher? –

+0

Android Monitor verfügt über ein Hauptfenster, das die Logcat-, Arbeitsspeicher-, CPU-, GPU- und Netzwerkmonitore enthält. In diesem Fenster können Sie einen Geräte- und App-Prozess auswählen, mit dem Sie arbeiten, eine App beenden, Dumpsys-Systeminformationen sammeln und Screenshots und Videos der laufenden App erstellen können. Dies ist ein Speicher von Android Monitor –

Antwort

1

Universal Image Loader eine Bibliothek von nostra13 ist die gut hübsch ist dokumentiert und weit verbreitet und wird für die Konfiguration es Einstellung bekannt liefert zum Laden von Bildern. Darin gibt es eine Option zum Laden der Bilder in RGB_565, die Ihren Speicherverbrauch um etwa die Hälfte (haben die Ergebnisse praktisch gesehen) und vieles mehr verringern können.

Verwenden Sie .bitmapConfig (Bitmap.Config.RGB_565) in Anzeigeoptionen. Bitmaps in RGB_565 verbrauchen 2 mal weniger Speicher als in ARGB_8888.

Und einmal in WeakReferences suchen. Es könnte beim Aufrufen von Garbage Collector für speicherintensive Bilder helfen.

0

Nach der Dokumentation für setImageResource,

Dies macht Bitmap Lesen und Decodieren auf dem UI-Thread, der eine Latenz Schluckauf verursachen kann. Wenn dies ein Problem ist, sollten Sie stattdessen setImageDrawable (android.graphics.drawable.Drawable) oder setImageBitmap (android.graphics.Bitmap) und BitmapFactory verwenden.

Oder verwenden Sie einfach ein Bild Laden Bibliothek zu faul Last Bilder

Verwandte Themen