java.util.concurrent.RejectedExecutionException in Async Task Android

匿名 (未验证) 提交于 2019-12-03 08:51:18

问题:

public View getView(final int position, View convertView, ViewGroup parent) {     SectionHolder sectionHolder = null;     ViewHolder holder = null;     convertView = listAdapter.getView(getIndexForPosition(position),                 convertView, parent);     convertView.setTag(contactsIds[getIndexForPosition(position)]);     holder = new ViewHolder();     holder.txtTitle = (TextView) convertView                 .findViewById(R.id.list_item_title);     holder.id = contactsIds[getIndexForPosition(position)];     new ThumbnailTask(holder,contactsIds[getIndexForPosition(position)]).execute();     return convertView; }  private class ThumbnailTask extends AsyncTask<Void, Void, Integer> {     private String mId;     private ViewHolder mHolder;     public ThumbnailTask(ViewHolder holder, String id) {         mId = id;         mHolder = holder;     }      @Override     protected Integer doInBackground(Void... params) {         // TODO Auto-generated method stub         int drawableId = getContactStatus(mHolder.id);         // Log.i("DRAWABLE",drawableId+"");         return drawableId;     }      protected void onPostExecute(Integer drawableId) {         if (mHolder.id.equals(mId)) {             if (drawableId != 0) {                 if (UpdateStatusService.user == 1) {                     mHolder.txtTitle.setCompoundDrawablesWithIntrinsicBounds(0, 0,drawableId, 0);                 } else {                     mHolder.txtTitle.setCompoundDrawablesWithIntrinsicBounds(0, 0,R.drawable.ic_action_quetion, 0);                 }             } else {                     mHolder.txtTitle.setCompoundDrawablesWithIntrinsicBounds(0,0, android.R.color.transparent, 0);             }         }     } } static class ViewHolder {     public TextView txtTitle;     public String id; } 

This is my code of adapter to getView of the listview.

ListView Contains the list of contacts from the android.

but i am getting the java.util.concurrent.RejectedExecutionException Async task basically get the image from the server and if any number matches to the server data that will contain one image to set otherwise not.

So what should i do to avoid this exception?

回答1:

AsyncTask threads are placed in a work queue. That work queue restricts how many threads you can instantiate. When you exceed the maximum it will give you a RejectedExecutionException.

The solution is to refactor your code to not instantiate threads in getView() or have a check that controls if a thread for the current row already has started. getView() gets called very frequently and therefore you will eventually exceed the number of allowed threads if you're not checking if a thread is currently running on a row.

DOWNLOAD LINK: https://www.dropbox.com/s/pvr9zyl811tfeem/ListViewImageCache.zip



标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!