2013-08-07 7 views
7

Ich verwende UrlImageViewHelper, um Bilder in einer Adapteransicht zu laden.Was könnte das Laden in Android 4.1.X verlangsamen und nicht auf 4.2?

Mein Adapter ist:


@Override 
public View getView(int position, View convertView, ViewGroup parent) {    
    if(convertView==null){ 
     convertView=new SquaredImageView(getContext()); 
    } 
    SquaredImageView view= (SquaredImageView) convertView; 
    final long time=System.currentTimeMillis(); 
    UrlImageViewHelper.setUrlDrawable(view,getItem(position).getLook_picture(), 
      R.drawable.placeholder_bkp, -1,new UrlImageViewCallback() { 
        @Override 
        public void onLoaded(ImageView imageView, Bitmap loadedBitmap, 
               String url, boolean loadedFromCache) { 
         Log.d(TAG,"time : "+ (System.currentTimeMillis()-time)); 
        } 
    }); 
    return view; 
} 

Ich bin das Herunterladen und Anzeigen von großen Bildern (620x620 jpg) in einer vollen Breite Liste. Sie sind langsam, wenn sie zum ersten Mal heruntergeladen/angezeigt werden. Dieses Problem tritt nicht mehr nach einem Upgrade auf Android 4.2 auf. auf HTC eins.

Ich habe versucht, die Anrufe zu profilieren und ich glaube, dass während der sehr langen Anrufe, es hängt den Socket-Eingangsstrom zu lesen.

Hat jemand einen Hinweis darauf, warum es so einen Leistungsunterschied zwischen den beiden Plattformen gibt?


Logcat Ausgänge: (Timings unter 100 ms sind in der Regel dupliziert)

android 4.1.Galaxy SIII 2 mini

  • Zeit: 3217
  • Zeit: 4782
  • Zeit: 124
  • Zeit: 56
  • Zeit: 168
  • Zeit: 84
  • Zeit: 102
  • zeit: 2819
  • zeit: 2703
  • Zeit: 154
  • Zeit: 2468
  • Zeit: 81
  • Zeit: 40
  • Zeit: 52
  • Zeit: 2495
  • Zeit: 37
  • Zeit: 2007
  • Zeit: 58
  • Zeit: 38
  • Zeit: 119
  • Zeit: 80
  • Zeit: 44
  • Zeit: 2419
  • Zeit: 1651
  • Zeit: 40
  • Zeit: 2766
  • Zeit: 90
  • Zeit: 1889
  • zeit: 183
  • zeit: 2515
  • Zeit: 58
  • Zeit: 3345
  • Zeit: 2661
  • Zeit: 81
  • Zeit: 2434
  • Zeit: 119

meist oberhalb von 1,5 sec. Benutzer muss Elemente eins nach dem anderen scrollen, um das Bild zu sehen

Auf Android 4.3 Nexus 4:

  • Zeit: 47
  • Zeit 1111
  • Zeit: 154
  • Zeit: 46
  • Zeit: 124
  • Zeit: 115
  • Zeit: 150
  • zeit: 201
  • zeit: 332
  • Zeit: 366
  • Zeit: 450
  • Zeit: 82
  • Zeit: 167
  • Zeit: 81
  • Zeit: 150
  • Zeit: 224
  • Zeit: 224
  • Zeit: 143
  • Zeit: 185
  • Zeit: 66
  • Zeit: 183
  • Zeit: 66
  • Zeit: 218
  • Zeit: 98
  • Zeit: 169
  • Zeit: 49
  • Zeit: 148
  • Zeit : 65
  • zeit: 64
  • zeit: 60
  • Zeit: 169
  • Zeit: 51

konsequent unter 500 ms, Liste ist verwendbar

+0

Vielleicht wird die Zuordnung der UrlImageViewCallback innerhalb der getView-Methode, verlangsamt es, können Sie versuchen, es die gleiche Instanz, immer und immer wieder zu übergeben? –

+0

Die Zeit in der getview-Methode des Adapters liegt konsistent unter 5 ms. Wenn ich den gesamten Rückruf entferne, sehe ich die gleichen Ergebnisse. (Einer ist sehr langsam, der andere ist schnell). Ich denke nicht, dass der Rückruf die Ursache des Problems ist. – alaeri

+0

Sie sind sicher, das ist nicht einfach nur Download-Zeit? Wie groß sind die Dateien? Die letztere Gruppe von Werten zeigt an, dass sie wahrscheinlich aus dem Cache geladen werden. – koush

Antwort

2

Dies hat nichts mit dem Betriebssystem auf dem Telefon zu tun. Der wahrscheinlichste und wahrscheinlichste Grund ist die Menge an RAM-Speicher, die von anderen Anwendungen auf dem Gerät belegt wird. Versuchen Sie zu Testzwecken, denselben Code auf einem neuen Gerät auszuführen, auf dem nicht viele Apps ausgeführt werden.

+0

Ich glaubte, es war der Fall, bevor wir ein HTC One-Gerät auf 4.2 aktualisiert und alles beschleunigt. Es sei denn, die Menge an RAM, die Apps zugewiesen wurde, stieg zwischen 1 und 4.2. Ich habe das Gerät nicht mehr zu überprüfen. – alaeri

+0

Ich vergebe dir das Kopfgeld. Es gab eine Verbesserung und dies ist immer noch die wahrscheinlichste Ursache. Dennoch, ich verstehe nicht, warum es nach dem Upgrade auf HTC One geändert hat. – alaeri

+0

Das ist nett .. :) –

1

(ich diese Antwort nicht erwarten, dass die Prämie nehmen)
UrlImageViewHelper verwendet HttpURLConnection zu Machen Sie die http-Aufrufe an den Webserver, der die Bilder bereitstellt. Wir haben HttpURLConnection verwendet (und versucht, die meisten anderen Klassen zu tun http bekommt), fanden wir es am wenigsten flockig (vor allem auf Android 2.3) der allgemein flockigen Klassen (z. B. die org.apache.http Zeug usw.). Irgendwann habe ich einen Protokollanalysator (tcpdump oder tshark) auf unserem Webserver benutzt und festgestellt, dass die ACKs nicht rechtzeitig zurückkamen. Ich denke (das war vor über einem Jahr), dass ich mehr oder weniger das gleiche fand Ding auf WiFi und Zellendaten (T-Mobile GSM). Ich folgerte, dass es in diesen Klassen Probleme auf niedrigem Niveau gab, vielleicht Probleme mit Dalvik selbst. Wiederum erwarte ich nicht, dass diese Antwort das Kopfgeld nimmt, ich habe nicht versucht, meine Behauptungen zu beweisen, ich erzähle nur, wie weit ich in meiner Untersuchung ein ähnliches Problem bekommen habe.

+0

Suche stackoverflow für Sachen im Zusammenhang mit HttpURLConnection – tallen

+0

Ich habe versucht, Picasso zu verwenden, um UrlImageViewHelper zu ersetzen, und ich hatte das gleiche Verhalten :(Picasso verwenden okhttp lib. Es könnte sein der Fall, dass es von der gleichen niedrigen Ebene Problem betroffen ist, aber es ist nicht sicher – alaeri

+0

[diese Frage] (http://stackoverflow.com/questions/14717752/httpurlconnection-very-slow?lq=1) könnte das gleiche Problem haben aber niemand antwortete :(Ich habe das Kopfgeld der anderen Antwort zugesprochen, aber ich möchte dir für deine Hilfe danken. Ich werde versuchen, die Frage nächste Woche mit Testresul zu aktualisieren ts. – alaeri

Verwandte Themen