2016-03-31 7 views
0

Ich verwende diese Methode, um 10 Bild auf der ersten Seite zu laden, aber ich habe ein Problem. Das erste Bild braucht viel Zeit zum Laden. Nach dem ersten Bild wird das andere Bild schnell geladen. Ich weiß nicht warum?Load 10 Bild auf der ersten Seite

Aufruf der Methode new DownloadImageTask((ImageView) findViewById(R.id.imageView_bb1).execute(db.getURLimgMahsol(id_bb2));

loadimage Methode

private class DownloadImageTask extends AsyncTask<String, Void, Bitmap> { 
     ImageView bmImage; 

     public DownloadImageTask(ImageView bmImage) { 
      this.bmImage = bmImage; 

     } 

     protected Bitmap doInBackground(String... urls) { 
      String urldisplay = urls[0]; 
      Bitmap mIcon11 = null; 
      try { 
       InputStream in = new java.net.URL(urldisplay).openStream(); 
       mIcon11 = BitmapFactory.decodeStream(in); 
      } catch (Exception e) { 
       Log.e("Error", e.getMessage()); 
       e.printStackTrace(); 
      } 
      return mIcon11; 
     } 

     protected void onPostExecute(Bitmap result) { 
      bmImage.setImageBitmap(result); 
     } 
    } 
+0

Yes.I bearbeiten Problem –

Antwort

-1

Wahrscheinlich beginnen Sie 10 AsyncTask ‚s eins nach dem anderen, so UI einfrieren wird.
Sie sollten Warteschlange machen: zuerst starten AsyncTask ->onPostExecute Start Sekunde und so weiter.


Ich schlage vor, Sie Glide zu verwenden.
Here ist die Diskussion über Glide und andere ImageLoader.

+0

Tnx für deine Antwort habe ich gelesen, Glide aber ich weiß, don 't, wie ich dieses sollte ich importieren verwenden, können? –

+0

@SobhanMoradi, also wissen Sie nicht, wie Gradle Abhängigkeiten in Android Studio zu verwenden? Google wird dir helfen! –

+0

AsyncTasks werden immer in einem Thread ausgeführt, also unabhängig davon, wie viele Sie gleichzeitig ausführen, werden sie nacheinander ausgeführt. –

1

Verwenden Sie Glide, Picasso oder einen anderen Bildlader. Es ist auch keine gute Übung, den Verweis auf ein UI-Element in AsyncTask zu halten oder eine private innere AsyncTask-Klasse zu haben. Sie können sehen, here warum.

1

Überprüfen Sie, ob Sie DownloadImageTask mit execute() anrufen und nicht mit get(). Das Ausführen von get() wird Block Ihre UI, bis die Aufgabe abgeschlossen ist.

Bitte erfinden Sie das Rad NICHT neu! Es gibt viele gute Bibliotheken, um ein Bild effizient von der URL zu laden.

Hoffe das hilft !!