Zugriff auf SD Karte zu langsam

  • 5 Antworten
  • Neuester Beitrag
Diskutiere Zugriff auf SD Karte zu langsam im Android App Entwicklung im Bereich Betriebssysteme & Apps.
B

ben56a

Ambitioniertes Mitglied
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
 
S

strider

Fortgeschrittenes Mitglied
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.
 
B

ben56a

Ambitioniertes Mitglied
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?
 
T

the_alien

Experte
Wie groß sind die Bilder? Wie viele davon? Wie schnell ist die SD Karte?
Was heißt für dich es "dauert zu lange"?
 
B

ben56a

Ambitioniertes Mitglied
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
 
T

the_alien

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