| |||||||
Das Thema "App hängt beim Nachladen einiger Bilder/Daten" befindet sich unter Android App Entwicklung auf Android-Hilfe.de.
|
| | Themen-Optionen | Ansicht |
| | #1 (permalink) |
| Neuer Benutzer Registriert seit: 07.12.2010
Beiträge: 26
Abgegebene Danke: 2
Erhielt 2 Danke für 2 Beiträge
| Ich haben folgendes "kleines" Problem: Ich hab eine ScrollView in der sich ein TableLayout befindet. Standardmäßig befinden sich beim Start 15 TableRows in diesem TableLayout. Jede Zeile hat dabei ein Platzhalterbild. Dieses Platzhalterbild wird, sobald die entsprechende Zeile in den sichtbaren Bereich gelangt, durch das richtige Bild ersetzt, welches von einem Webserver geladen wird. Das Laden des Bildes stellt soweit kein Problem dar. Sobald ich aber das Bild anzeigen lassen will hängt sich für 1-2 Sekunde die App auf. Code: this.runOnUiThread(new Runnable() {
public void run() {
if(img != null && iv != null) {
iv.setImageDrawable(img); // ImageView
}
}
}); Genau das gleiche hab ich übrigens, wenn ich 15 weitere Zeilen nachladen will. Bis zu dem Zeitpunkt an dem alles geladen ist, läuft alles flüssig. Wenn ich es in mein View einhängen will, hängts wieder einige Sekunden. Was kann ich machen, damit mein App an dieser Stelle flüssig läuft? Gibts hier irgendwelche Tricks? Viele Grüße Son Goku |
| | |
| | #2 (permalink) |
| Android Guru Modell: T-Mobile G1, Nexus One, Samsung Galaxy Tab 10.1, Samsung Galaxy Nexus Registriert seit: 04.05.2009
Beiträge: 1.599
Abgegebene Danke: 128
Erhielt 210 Danke für 193 Beiträge
|
Hm, ist das image eventuelle einfach viel zu groß, so dass es erst runterskaliert wird? Ich mache ähnliches mit deutlich mehr Bildern und das ist komplett flüssig.
__________________ Follow/Add/Circle/Whatever me on Google+ Solitaire HD, ein Solitaire optimiert für Honeycomb. |
| | |
| | #3 (permalink) |
| Neuer Benutzer Registriert seit: 07.12.2010
Beiträge: 26
Abgegebene Danke: 2
Erhielt 2 Danke für 2 Beiträge
|
Das Bild ist in einer Dimension nicht größer als 100px und nicht größer als ein 2-3kb. Die Breite und Höhe des ImageView hab ich auf fix 100px gesetzt. Nehm ich die Größe raus, wird das Bild viel kleiner als bisher angezeigt. Das Platzhalterbild, was genau so groß ist, behält seine Größe. Aber das Problem bleibt das Gleiche! Kann ich evtl. den Main-Thread höher priorisieren, damit die GUI schneller aktualisiert wird? EDIT: Ich hab gerade festgestellt, dass das Platzhalterbild, sogar größer als 100px dargestellt wird, wenn ich keine Größenangaben im ImageView hab, obwohl das genau 100x100px misst. |
| | |
| | #4 (permalink) |
| Android Guru Modell: T-Mobile G1, Nexus One, Samsung Galaxy Tab 10.1, Samsung Galaxy Nexus Registriert seit: 04.05.2009
Beiträge: 1.599
Abgegebene Danke: 128
Erhielt 210 Danke für 193 Beiträge
|
Wie lädst du denn das Bild aus dem Web?
__________________ Follow/Add/Circle/Whatever me on Google+ Solitaire HD, ein Solitaire optimiert für Honeycomb. |
| | |
| | #5 (permalink) |
| Neuer Benutzer Registriert seit: 07.12.2010
Beiträge: 26
Abgegebene Danke: 2
Erhielt 2 Danke für 2 Beiträge
|
So Code: private Drawable loadImage(String imageURL) {
try {
URL url = new URL(imageURL);
InputStream is = url.openStream();
Drawable image = Drawable.createFromStream(is, "image");
is.close();
return image;
} catch (MalformedURLException e) {
} catch (IOException e) {
}
return null;
} Das Problem mit dem hängen beim Nachladen der 15 Datensätze ist wahrscheinlich das Gleiche. Da hängts ja auch. Nur etwas länger. |
| | |
| | #6 (permalink) |
| Android Guru Modell: T-Mobile G1, Nexus One, Samsung Galaxy Tab 10.1, Samsung Galaxy Nexus Registriert seit: 04.05.2009
Beiträge: 1.599
Abgegebene Danke: 128
Erhielt 210 Danke für 193 Beiträge
|
Ist das in einem AsyncTask? Hast du deinen eigenen Downloadthread?
__________________ Follow/Add/Circle/Whatever me on Google+ Solitaire HD, ein Solitaire optimiert für Honeycomb. |
| | |
| | #7 (permalink) |
| Neuer Benutzer Registriert seit: 07.12.2010
Beiträge: 26
Abgegebene Danke: 2
Erhielt 2 Danke für 2 Beiträge
|
AsyncTask sagt mir jetzt nichts. Downloadthread triffts wohl eher. Das erreichen des sichtbaren Bereiches wird in einem onTouchListener des ScrollView geprüft und wenn noch nicht vorhanden, ein eigener Thread extra fü den Download geöffnet. Hier der gesammte Code: Code: public void onCreate(Bundle savedInstanceState) {
[...]
final ScrollView sv = (ScrollView) findViewById(R.id.scrollView);
sv.setOnTouchListener(new OnTouchListener() {
public boolean onTouch(View v, MotionEvent event) {
[...]
// 'tr' ist die TableRow, in dem das ImageView sitzt.
final ImageView iv = (ImageView) tr.findViewById(R.id.imageView);
final String imageURL = data[i].get("img").toString();
new Thread(new Runnable() {
public void run() {
setImage(iv, imageURL);
}
}).start();
}
});
}
private Drawable loadImage(String imageURL) {
try {
URL url = new URL(imageURL);
InputStream is = url.openStream();
Drawable image = Drawable.createFromStream(is, "image");
is.close();
return image;
} catch (MalformedURLException e) {
} catch (IOException e) {
}
return null;
}
private void setImage(final ImageView iv, String imageURL) {
final Drawable img = loadImage(imageURL);
this.runOnUiThread(new Runnable() {
public void run() {
if(img != null && iv != null) {
iv.setImageDrawable(img);
}
}
});
} Meinst du das kann die Probleme beheben? Dann werd ich mich da morgen mal schlau machen. |
| | |
| | #8 (permalink) |
| Android Guru Modell: T-Mobile G1, Nexus One, Samsung Galaxy Tab 10.1, Samsung Galaxy Nexus Registriert seit: 04.05.2009
Beiträge: 1.599
Abgegebene Danke: 128
Erhielt 210 Danke für 193 Beiträge
|
Nein, ich benutzte den AsyncImageView aus der GreenDroid Lib. Diese lädt die Bilder in einem einzigen Thread herunter. Selbst mit 60 Remote Bildern funktioniert es einwandfrei und butterweich.
__________________ Follow/Add/Circle/Whatever me on Google+ Solitaire HD, ein Solitaire optimiert für Honeycomb. |
| | |
| | #9 (permalink) |
| Neuer Benutzer Registriert seit: 07.12.2010
Beiträge: 26
Abgegebene Danke: 2
Erhielt 2 Danke für 2 Beiträge
|
So, jetzt hat werr will die Gelegenheit zu lachen, wenn ich sage, was denn genau die Ldösung des Problems war, bzw. was mein Problm überhaupt verursacht hat. Es war der Debugger! Nachdem ich am Freitag nicht mehr dazu gekommen bin, an der App auch nur irgendwas zu machen, hab ich die am WE mal ein paar Freunden zum testen gegeben. Alles lief Problemlos. Selbst bei mir selbst, nachdem ich die App das erste Mal ohne Debugger am laufen hatte. Wieder am Debugger angeschlossen hab ich wieder die Hänger drin. Sonst läuft es ganz akzeptabel. Kleinere Hänger hab ich noch, aber die kann ich beim Market auch beobachten, also insoweit erstmal vernachlässigbar. Nochmal Danke für deine Hilfe! |
| | |
![]() |
|
| Themen-Optionen | |
| Ansicht | |
| |
| ||||
| Thema | Autor | Forum | Antworten | Letzter Beitrag |
| Android EMail App - keine Bilder nachladen | tux2000 | Foto und Multimedia | 0 | 31.07.2011 17:59 |
| daten/bilder komprimierung aendern beim black... | Oci | LG P970 Optimus Black Forum | 1 | 26.07.2011 06:46 |
| Kamera App hängt beim Video | Keno | LG P990 Optimus Speed Forum | 2 | 07.07.2011 07:10 |
| Gameloft-Spiele: Daten nachladen? | paul787 | Android Spiele | 10 | 12.01.2011 15:55 |
| WLAN hängt nach einiger Standby-Zeit | Sepp | Samsung Galaxy (I7500) Forum | 32 | 05.10.2010 19:23 |