Я пишу приложение, в котором мне нужно показывать изображения с URL.Теперь предположим, что мне нужно показать 100 изображений, одно за другим, и каждую фотографию нужно загрузить из Интернета.
Я использую представление галереи для отображения изображений, но проблема в том, что когда я передаю URL-адрес функции getView
, она начинает загрузку всех 100 изображений (да, только в асинхронной задаче), но загружает 100 изображенийзамедляет работу системыЧего я хочу добиться, так это то, что когда я двигаюсь правильно, моя программа должна выбрать URL-адрес и загрузить его из Интернета.
public class ViewImage extends Activity {
private String albumID;
private ArrayList<MediaBO>galleryList;
private Context context;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.localgallery);
this.context = this;
Intent intent = getIntent();
Bundle extras = intent.getExtras();
albumID = extras.getString("albumID");
int position = extras.getInt("position"); //position of the image selected
DataBaseOperation dataBaseOperation = new DataBaseOperation(this);
galleryList = dataBaseOperation.queryAllPhoto(albumID); //this returns the list of Photos needs to be shown.it has the URL of the photos
Gallery g = (Gallery) findViewById(R.id.localGallery);
g.setAdapter(new ImageAdapter(this));
g.setSelection(position);
}
public class ImageAdapter extends BaseAdapter{
private Context mContext;
int mGalleryItemBackground;
public ImageAdapter(Context c) {
mContext = c;
}
public int getCount(){
return galleryList.size();
}
public Object getItem(int position){
return position;
}
public long getItemId(int position) {
return position;
}
public View getView(int position, View convertView, ViewGroup parent){
ImageView i = new ImageView(mContext);
View v = convertView;
if (v == null) {
LayoutInflater vi = (LayoutInflater)mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
v = vi.inflate(R.layout.localgallery, null);
}
String url = galleryList.get(position).getUrl();
DOWNLOAD()//download the photo using Async Task
v = i;
return v;
}
}
}
Теперь проблема в том, что getview
вызывается, как только действиезагружен для всех URL-адресов, присутствующих в GalleyList
, что замедляет работу системы
@ cyngus: я пытался использовать ваш ответ ... но теперь уверен, как это использовать ..
Я создал объект executor в соответствии с вашими предложениями
Executor e = new ThreadPoolExecutor(CORE_POOL_SIZE, MAX_POOL_SIZE, KEEP_ALIVE,
TimeUnit.SECONDS, new LinkedBlockingQueue<Runnable>());
Но я не могу выяснить, как использовать это для вызова моей асинхронной задачи (BitmapDownloaderTask)
BitmapDownloaderTask task = new BitmapDownloaderTask(con,showDialog,i,path);
task.execute(url,null,null);
My AsynЗадача
private class BitmapDownloaderTask extends AsyncTask<String, Void, Bitmap> {
}