Zugriff auf SD Karte zu langsam

B

ben56a

Ambitioniertes Mitglied
0
Hallo,

nachdem die App gestartet wurde, werden im Hintergrund aus dem Internet Bilder heruntergeladen, welche ich auf die SD Karte packe um nicht immer eine Internetverbindung zu benötigen.

Wenn ich aber nun auf die Bilder zugreife und diese in eine ImageView packe, dann dauert es zu lange, bis diese geladen sind. Gibt es eine bessere Möglichkeit?

Hier werden die Bilder auf die SD Karte gespeichert
Code:
extStorageDirectory = Environment.getExternalStorageDirectory().toString();
					
					 OutputStream outStream = null;
					 File file = new File(extStorageDirectory, "1.PNG");
					 
					 try {
					    outStream = new FileOutputStream(file);
					    bm.compress(Bitmap.CompressFormat.PNG, 100, outStream);
					    outStream.flush();
					    outStream.close();
					   }catch (Exception e) {
						// TODO: handle exception
					}


Hier werden Sie von der SD Karte geladen
Code:
String extStorageDirectory = Environment.getExternalStorageDirectory().toString();
		
		 try {
	          File f = new File(extStorageDirectory, "1.PNG");
	          if (!f.exists()) { return null; }
	          Bitmap bm = BitmapFactory.decodeFile(extStorageDirectory+"/1.PNG");
	          img.setImageBitmap(bm);
	          
	          
	      } catch (Exception et) {
	         
	      }

Vielen Dank
 
Das einlesen sieht richtig aus, was Du noch probieren könntest ist das Bild über einen BufferdInputStream einzulesen.
Bitmap bitmap = BitmapFactory.decodeStream(new BufferedInputStream(...))
Ansonsten könntes du auch überprüfen ob es an der Bilddatei liegt. Versuch es mit einem anderen Bild testweise. Oder die SD Karte ist schlicht und einfach Schrott.
 
strider schrieb:
Das einlesen sieht richtig aus, was Du noch probieren könntest ist das Bild über einen BufferdInputStream einzulesen.
Bitmap bitmap = BitmapFactory.decodeStream(new BufferedInputStream(...))
Ansonsten könntes du auch überprüfen ob es an der Bilddatei liegt. Versuch es mit einem anderen Bild testweise. Oder die SD Karte ist schlicht und einfach Schrott.

Ich habe es jetzt folgendermaßen versucht:

Code:
 Uri ur = Uri.parse(extStorageDirectory+"/"+e.getId()+".PNG");
	          img.setImageURI(ur);

Ich greife auf das Bild zu und erzeuge es nicht neu! Allerdings ist es nur minimal schneller! Das ganze ist in einer schleife und wird 5mal durchgeführt, kann dies zu problemen führen?
 
Wie groß sind die Bilder? Wie viele davon? Wie schnell ist die SD Karte?
Was heißt für dich es "dauert zu lange"?
 
the_alien schrieb:
Wie groß sind die Bilder? Wie viele davon? Wie schnell ist die SD Karte?
Was heißt für dich es "dauert zu lange"?

Die Bildgröße variiert, allerdings würde ich so zwischen 50 und 500 KB schätzen. Es soll zu jedem ListView Eintrag ein Bild geladen werden. Da die ListView Größe nicht konstant ist, sondern von der Eingabe des Users abhängt, kann auch dies unterschiedlich sein. Zu Testzwecken habe ich momentan 5 Bilder die ich von der SD Karte lade.
"dauert zu lange" heißt für mich:
Wenn man eine Auswahl trifft und dann dauert es ca 2-3 sekunden, bis die nächste Activity angezeigt wird. Einen Ladebalken mächte ich nicht einbauen, da dies unschön ist. Lieber will ich die Activity schneller laden!

Die Geschwindigkeit der SD Karte weiß ich leider gerade nicht auswendig, kann ich aber nachliefern.

Vielen Dank
 
Dann bau doch mal ein paar Log Statements ein um zu gucken was genau jetzt zu lange dauert.
 

Ähnliche Themen

M
  • MikelKatzengreis
Antworten
5
Aufrufe
127
swa00
swa00
S
  • skywalker22
Antworten
1
Aufrufe
172
swa00
swa00
S
Antworten
17
Aufrufe
554
jogimuc
J
Zurück
Oben Unten