1. Nimm jetzt an unserem Uhans - 3. ADVENT - Gewinnspiel teil - Alle Informationen findest Du hier!

Stack Overflow

Dieses Thema im Forum "Android App Entwicklung" wurde erstellt von ceoozan, 26.06.2011.

  1. ceoozan, 26.06.2011 #1
    ceoozan

    ceoozan Threadstarter Neuer Benutzer

    Beiträge:
    3
    Erhaltene Danke:
    0
    Registriert seit:
    26.06.2011
    Hi Alle,

    Ich habe ein Problem. Ich möchte gerne in Activity ein
    ViewFlipper, der aus vielen Bildern bestehen.
    Beim Hinzufügen kriege ich aber ein OutOfMemoryException.

    Der Codeschnitt sieht wie folgt aus:

    Code:
     nFirst = 0x7f020000     // das erste Bild
     nLast = 0x7f020063     // das letzte Bild
      
     ViewFlipper flipper = (ViewFlipper) findViewById(R.id.ViewFlipper01);
    
     // ungefähr 100 Bilder, gesammt größe : 2,1 MB 
     for (i = nFirst; i < nLast; i++)
       {
          image = new ImageView(this);
          image.setImageResource(i);
          flipper.addView(image);
       }
    
    Die Fehlermeldung :

    Code:
    
    06-26 09:46:20.541: WARN/dalvikvm(343): threadid=1: thread exiting with uncaught exception (group=0x40015560)
    06-26 09:46:20.571: ERROR/AndroidRuntime(343): FATAL EXCEPTION: main
    06-26 09:46:20.571: ERROR/AndroidRuntime(343): java.lang.OutOfMemoryError: bitmap size exceeds VM budget
    06-26 09:46:20.571: ERROR/AndroidRuntime(343):     at android.graphics.BitmapFactory.nativeDecodeAsset(Native Method)
    06-26 09:46:20.571: ERROR/AndroidRuntime(343):     at android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:460)
    06-26 09:46:20.571: ERROR/AndroidRuntime(343):     at android.graphics.BitmapFactory.decodeResourceStream(BitmapFactory.java:336)
    06-26 09:46:20.571: ERROR/AndroidRuntime(343):     at android.graphics.drawable.Drawable.createFromResourceStream(Drawable.java:697)
    06-26 09:46:20.571: ERROR/AndroidRuntime(343):     at android.content.res.Resources.loadDrawable(Resources.java:1709)
    06-26 09:46:20.571: ERROR/AndroidRuntime(343):     at android.content.res.Resources.getDrawable(Resources.java:581)
    06-26 09:46:20.571: ERROR/AndroidRuntime(343):     at android.widget.ImageView.resolveUri(ImageView.java:501)
    06-26 09:46:20.571: ERROR/AndroidRuntime(343):     at android.widget.ImageView.setImageResource(ImageView.java:280)
    06-26 09:46:20.571: ERROR/AndroidRuntime(343):     at gui.cevsen.Cevsen.onClick(Cevsen.java:110)
    06-26 09:46:20.571: ERROR/AndroidRuntime(343):     at android.view.View.performClick(View.java:2485)
    06-26 09:46:20.571: ERROR/AndroidRuntime(343):     at android.view.View$PerformClick.run(View.java:9080)
    06-26 09:46:20.571: ERROR/AndroidRuntime(343):     at android.os.Handler.handleCallback(Handler.java:587)
    06-26 09:46:20.571: ERROR/AndroidRuntime(343):     at android.os.Handler.dispatchMessage(Handler.java:92)
    06-26 09:46:20.571: ERROR/AndroidRuntime(343):     at android.os.Looper.loop(Looper.java:123)
    06-26 09:46:20.571: ERROR/AndroidRuntime(343):     at android.app.ActivityThread.main(ActivityThread.java:3683)
    06-26 09:46:20.571: ERROR/AndroidRuntime(343):     at java.lang.reflect.Method.invokeNative(Native Method)
    06-26 09:46:20.571: ERROR/AndroidRuntime(343):     at java.lang.reflect.Method.invoke(Method.java:507)
    06-26 09:46:20.571: ERROR/AndroidRuntime(343):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
    06-26 09:46:20.571: ERROR/AndroidRuntime(343):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
    06-26 09:46:20.571: ERROR/AndroidRuntime(343):     at dalvik.system.NativeStart.main(Native Method)
    06-26 09:46:20.601: WARN/ActivityManager(67):   Force finishing activity gui.cevsen/.Cevsen
    06-26 09:46:21.161: WARN/ActivityManager(67): Activity pause timeout for HistoryRecord{40573e70 gui.cevsen/.Cevsen}
    
    
    Die Frage ist, kann/darf ich nicht so viele Bilder hinzufügen?

    Danke im voraus.
     
  2. swordi, 26.06.2011 #2
    swordi

    swordi Gewerbliches Mitglied

    Beiträge:
    3,389
    Erhaltene Danke:
    441
    Registriert seit:
    09.05.2009
    das würde sich ja ganz leicht rausfinden lassen, wenn du einfach mal nur die hälfte nimmst
     
  3. DieGoldeneMitte, 26.06.2011 #3
    DieGoldeneMitte

    DieGoldeneMitte Android-Lexikon

    Beiträge:
    1,230
    Erhaltene Danke:
    256
    Registriert seit:
    05.02.2010
    Phone:
    Nexus 5X
    Tablet:
    Nexus 7 (2013)
    Bei >10 Bildern würde ich ohnehin eher den ViewSwitcher nehmen. Da kannst Du die Bilder dann lazy und somit auch noch schneller laden.
     
  4. ceoozan, 26.06.2011 #4
    ceoozan

    ceoozan Threadstarter Neuer Benutzer

    Beiträge:
    3
    Erhaltene Danke:
    0
    Registriert seit:
    26.06.2011
    Ich bekomme den Fehler immer dann, wenn die gesammt größe 2MB überschreitet. Ich muss aber alle Bilder verwenden. Was ist aber lazy?
     
  5. swordi, 26.06.2011 #5
    swordi

    swordi Gewerbliches Mitglied

    Beiträge:
    3,389
    Erhaltene Danke:
    441
    Registriert seit:
    09.05.2009
    er meint du sollst nicht alle bilder gleich reinladen.
    einfach mal 3-5 bilder im speicher halten und beim weiterschalten einfach das letzte weglsöchen und vorne eines dazuladen.

    so hast keine "gefühlten" ladezeiten und nur wenige bilder im speicher.
     
  6. ceoozan, 26.06.2011 #6
    ceoozan

    ceoozan Threadstarter Neuer Benutzer

    Beiträge:
    3
    Erhaltene Danke:
    0
    Registriert seit:
    26.06.2011
    Danke, ich probiere es.
     

Diese Seite empfehlen