Надо при прокрутке подгружать картинки в ListView.
Сделал такой код:
list.setOnScrollListener(new OnScrollListener() {
@Override
public void onScrollStateChanged(AbsListView view, int scrollState) {
// TODO Auto-generated method stub
for(int i = list.getFirstVisiblePosition(); i<list.getLastVisiblePosition(); i++){
if(i<10){
if(icon_list.get(i)==null){
new ThreadImSec1(i).execute();
}
}
if(i>9&&i<20){
if(icon_list.get(i)==null){
new ThreadImSec2(i).execute();
}
}
}
}
@Override
public void onScroll(AbsListView view, int firstVisibleItem,
int visibleItemCount, int totalItemCount) {
}
});
Потоками поочередно гружу картинки, каждый раз созадавая поток и передавая индекс нужного элемента. Такая реализация работает очень медленно, у меня быстрее работает раза в три если тупо эти потоки запустить без всяких обработок скрола.. Как можно оптимизировать?
Пример потока:
public class ThreadImSec1 extends AsyncTask<String, Void, Bitmap> {
int number;
public ThreadImSec1(int _number)
{
number = _number;
}
@Override
protected Bitmap doInBackground(String... arg) {
DefaultHttpClient hc = new DefaultHttpClient();
ResponseHandler<String> response = new BasicResponseHandler();
HttpGet http_new ;
Bitmap mIcon = null;
try {
http_new = new HttpGet(api_new);
answer_new = hc.execute(http_new, response);
jsonA_new = new JSONArray(answer_new);
icon=jsonA_new.getJSONObject(number).getString("icon").toString();
InputStream in = new java.net.URL(domen+icon).openStream();
mIcon = BitmapFactory.decodeStream(in);
icon_list.set(number,mIcon);
in.close();
}catch (ClientProtocolException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return mIcon;
}
@Override
protected void onPostExecute(Bitmap result) {
adapter.notifyDataSetChanged();
}