<Params,Progress,Result> (没有就是Void)
Params:传入异步任务的参数类型(通过.excute()传入)
Progress:任务执行中产生的数据类型,通过publishProgress方法传到onProgressUpdate来处理
Result:任务执行完以后返回的数据类型,在onPostExecute中来处理
asyncTask.execute(Params); //执行任务,需要传参数,就直接加
asyncTask.cancel(true); //可以停止任务
注:他的任务是在一个任务队列依次执行
通过继承AsyncTask这个类来重写他的方法
<span style="font-size:14px;">/* * <Params,Progress,Result> 三个参数类型Params:传入异步任务的参数类型(通过.excute()传入) * Progress:任务执行中产生的数据类型,通过publishProgress方法传到onProgressUpdate来处理 * Result:任务执行完以后返回的数据类型,在onPostExecute中来处理 */ public class MyAsyncTask extends AsyncTask<Void, Integer, String> { /* * 最先执行的方法 */ @Override protected void onPreExecute() { super.onPreExecute(); } /* * 执行异步任务,属于子线程,不能更新UI线程 * 返回的值为onPostExecute方法中的参数 */ @Override protected String doInBackground(Void... params) { for (int i = 0; i < 100; i++) { mSbar.setProgress(i); publishProgress(i);// i 为onProgressUpdate方法的值参 try { Thread.sleep(100); } catch (InterruptedException e) { e.printStackTrace(); } } String result = "下载完成"; return result; } /* * 处理异步任务中通过publishProgress(??)发送的值 控件的刷新,参数values为doInBackground方法中通过 * publishProgress(values)传过来的值 */ @Override protected void onProgressUpdate(Integer... values) { super.onProgressUpdate(values); mShowTxt.setText(values[0] + ""); } /* * 处理异步任务完成后的返回值 上面任务执行完以后再执行的代码,参数result 为doInBackground方法中返回的值 */ @Override protected void onPostExecute(String result) { super.onPostExecute(result); mShowTxt.setText(result); } }</span>
executeOnExecutor(Executor,Params) //多任务同时执行
Executor:
<span style="white-space:pre"> <span style="font-size:14px;"> </span></span><span style="font-size:14px;">Executor mExecutor; //10 150 1 0 对应: 同時执行的线程数/ 总线程数/ 執行時間,時間一到,線程會被摧毀 mExecutor = new ThreadPoolExecutor(10, 150, 10, TimeUnit.SECONDS, new LinkedBlockingQueue<Runnable>()); GridViewAdapter adapter = new GridViewAdapter(this); mGrid.setAdapter(adapter); adapter.setData(mImageDta);</span>
<span style="font-size:14px;">public class GridViewAdapter extends BaseAdapter { String[] mImageDta = {}; private LayoutInflater infalter; public void setData(String[] imageDta) { this.mImageDta = imageDta; notifyDataSetChanged();//刷新数据源 } public GridViewAdapter(Context context) { infalter = LayoutInflater.from(context); } @Override public int getCount() { return mImageDta.length; } @Override public Object getItem(int position) { return mImageDta[position]; } @Override public long getItemId(int position) { return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { final ImageView imageview; if (convertView == null) { convertView = infalter.inflate( R.layout.imgview_child_gridview_layout, null); imageview = (ImageView) convertView .findViewById(R.id.img_child_grid); convertView.setTag(imageview); } else { imageview = (ImageView) convertView.getTag(); } String httpUrl = (String) getItem(position); new AsyncTask<String, Void, Bitmap>() { @Override protected Bitmap doInBackground(String... params) { return downLoadPicture(params[0]); } protected void onPostExecute(Bitmap result) { if (result != null) { imageview.setImageBitmap(result); } } }.execute(httpUrl); // 单任务一个一个执行 // }.executeOnExecutor(mExecutor,httpUrl); //多任务同时执行 return convertView; } }</span>
<span style="font-size:14px;">/** * 网络下载图片 */ public Bitmap downLoadPicture(String httpUrl) { try { URL url = new URL(httpUrl); HttpURLConnection conn = (HttpURLConnection) url.openConnection(); InputStream is = conn.getInputStream(); Bitmap bitmap = BitmapFactory.decodeStream(is); return bitmap; } catch (MalformedURLException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } return null; }</span>