2

Ich versuche, eine Diashow von Bildern mehr als 50 Bilder zu zeigen. Immer wenn ich es ausführe, bekomme ich einen OutOfMemoryError. Mein Code ist:Diashow anzeigen - Android OutOfMemoryError

public class SlideshowActivity extends Activity { 

private ViewFlipper myViewFlipper; 
int[] image = { R.drawable.one_facebook, R.drawable.two_facebook, 
     R.drawable.three_facebook, R.drawable.four_facebook, R.drawable.five_facebook, 
     R.drawable.six_facebook, R.drawable.seven_facebook, R.drawable.eight_facebook, 
     R.drawable.nine_facebook, R.drawable.ten_facebook, R.drawable.eleven_facebook, 
     R.drawable.onetwo_facebook, etc. }; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 

    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_slideshow); 
    myViewFlipper = (ViewFlipper) findViewById(R.id.myflipper); 

    for (int i = 0; i < image.length; i++) { 
     ImageView imageView = new ImageView(SlideshowActivity.this); 
     imageView.setImageResource(image[i]); 
     myViewFlipper.addView(imageView); 

    } 
    myViewFlipper.setAutoStart(true); 
    myViewFlipper.setFlipInterval(1000); 
    myViewFlipper.startFlipping(); 
} 

Mein logcat zeigt:

E/AndroidRuntime: FATAL EXCEPTION: main Process: com.applications.codegeek.slideshow, PID: 10126 java.lang.OutOfMemoryError: Failed to allocate a 52920012 byte allocation with 4194304 free bytes and 31MB until OOM at dalvik.system.VMRuntime.newNonMovableArray(Native Method) at android.graphics.BitmapFactory.nativeDecodeAsset(Native Method) at android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:620) at android.graphics.BitmapFactory.decodeResourceStream(BitmapFactory.java:455) at android.graphics.drawable.Drawable.createFromResourceStream(Drawable.java:1155) at android.content.res.ResourcesImpl.loadDrawableForCookie(ResourcesImpl.java:720) at android.content.res.ResourcesImpl.loadDrawable(ResourcesImpl.java:571) at android.content.res.Resources.getDrawable(Resources.java:771) at android.content.Context.getDrawable(Context.java:525) at android.widget.ImageView.resolveUri(ImageView.java:856) at android.widget.ImageView.setImageResource(ImageView.java:448) at com.applications.codegeek.slideshow.SlideshowActivity$override.onCreate(SlideshowActivity.java:29) at com.applications.codegeek.slideshow.SlideshowActivity$override.access$dispatch(SlideshowActivity.java) at com.applications.codegeek.slideshow.SlideshowActivity.onCreate(SlideshowActivity.java:0) at android.app.Activity.performCreate(Activity.java:6679) at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1118) at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2618) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2726) at android.app.ActivityThread.handleRelaunchActivity(ActivityThread.java:4519) at android.app.ActivityThread.-wrap19(ActivityThread.java) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1483) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:154) at android.app.ActivityThread.main(ActivityThread.java:6119) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776)

Jede mögliche Hilfe würde geschätzt! Vielen Dank!

+1

Warum verwenden Sie keine Bildlade-Bibliotheken wie glide, picasso etc. –

+0

Was ich auf [Glide für Github] (https://github.com/bumptech/glide) gefunden habe, war, dass es nützlich ist, Bilder anzuzeigen. Ich hätte es vielleicht falsch verstanden. Über [Picasso] (http://square.github.io/picasso/) Ich habe einige visuelle Beispiele darüber gesehen und was ich davon habe ist, dass es für Collagen nützlich ist. Ich könnte es falsch verstanden haben und wenn ja, dann sag mir bitte, was es wirklich macht. Vielen Dank! –

Antwort

0

Für reduzieren Speicher können Sie dieses Plugin verwenden Android Drawable Importer Plugin

Und auch ..

android: largeHeap = "true" in Ihrem Manifest Es wird Ihre Heap-Größe erhöhen und vermeiden Sie die OutOfMemory

Viel Glück!

+0

Es funktioniert immer noch nicht. Ich hatte bereits den largeHeap in meinem Manifest, aber ich konvertierte alle meine Bilder in ldpi, aber es zeigt immer noch diesen Fehler. Bitte helfen –

+0

versuchen, mit Put in Ihrem gradle dexOptions android { compileSdkVersion 25 buildToolsVersion '23 .0.3' dexOptions { preDexLibraries = false JavaMaxHeapSize "4g" } –

+0

Nö, ich immer noch die gleiche Fehlermeldung erhalten. Danke fürs ausprobieren. –

Verwandte Themen