I have this ImageAdapter for android's listView:
@Override
public View getView(int position, View convertView, ViewGroup parent) {
    View view = null;
    RelativeLayout relativeLayout = null;
    Offer currentOffer = mOffersList.get(position);
    if (convertView == null) { // create a new view if no recycling
                                // available
        // Make up a new view
        LayoutInflater inflater = (LayoutInflater) mContext
                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        view = inflater.inflate(R.layout.offer_list_item, null);
        relativeLayout = (RelativeLayout) view
                .findViewById(R.id.offerImage);
    } else {
        view = (View) convertView;
        relativeLayout = (RelativeLayout) view
                .findViewById(R.id.offerImage);
        setBackgroundDrawable(relativeLayout, null);
    }
    String imageUrl = "";
    imageUrl = currentOffer.getImageUrl().toString();
    Bitmap bitmap = imageCache.get(imageUrl);
    if (bitmap != null) {
        Drawable dr = new BitmapDrawable(mContext.getResources(), bitmap);
        setBackgroundDrawable(relativeLayout, dr);
    } else {
        if (!downloadingImageUrls.contains(imageUrl)) {
            downloadingImageUrls.add(imageUrl);
            new DownloadImageAsyncTask().execute(imageUrl);
        }
    }
    return view;
}
and this:
class DownloadImageAsyncTask extends AsyncTask<String, Void, Void> {
        @Override
        protected Void doInBackground(String... params) {
            String imageUrl = params[0];
            try {
                Bitmap bitmap = BitmapFactory
                        .decodeStream((InputStream) new URL(imageUrl)
                                .getContent());
                imageCache.put(imageUrl, bitmap);
            } catch (IOException e) {
                Log.e("DownloadImageAsyncTask", "Error reading bitmap" + e);
            }
            downloadingImageUrls.remove(imageUrl);
            return null;
        }
        @Override
        protected void onPostExecute(Void result) {
            notifyDataSetChanged();
        }
    }
why do all of the list items loaded together? it's don' asynchronously but yet not one by one. All together.
how can i load it lazily?
and why is this code more efficient?
// better
public class DownloadImageAsyncTask2 extends
        AsyncTask<String, Void, Bitmap> {
    private final ImageView imageView;
    public DownloadImageAsyncTask2(ImageView imageView) {
        this.imageView = imageView;
    }
    @Override
    protected void onPreExecute() {
        Log.i("DownloadImageAsyncTask", "Starting image download task...");
    }
    @Override
    protected Bitmap doInBackground(String... params) {
        try {
            return BitmapFactory.decodeStream((InputStream) new URL(
                    params[0]).getContent());
        } catch (IOException e) {
            Log.e("DownloadImageAsyncTask", "Error reading bitmap" + e);
        }
        return null;
    }
    @Override
    protected void onPostExecute(Bitmap bitmap) {
        if (bitmap != null) {
            imageView.setImageBitmap(bitmap);
        }
    }
}
 
     
     
     
     
     
    