Android异步加载全解析之使用AsyncTask
Android异步加载全解析之使用AsyncTask
概述
AsyncTask初探
AsyncTask参数
AsyncTask <Params, Progress, Result>
- Params: 这个泛型指定的是我们传递给异步任务执行时的参数的类型
- Progress: 这个泛型指定的是我们的异步任务在执行的时候将执行的进度返回给UI线程的参数的类型
- Result: 这个泛型指定的异步任务执行完后返回给UI线程的结果的类型
AsyncTask方法
AsyncTask使用
private class ASyncDownloadImage extends AsyncTask<String, Void, Bitmap> { private ImageView imageView; private String url; public ASyncDownloadImage(ImageView imageView, String url) { this.imageView = imageView; this.url = url; } @Override protected Bitmap doInBackground(String... params) { return getBitmapFromUrl(params[0]); } @Override protected void onPostExecute(Bitmap bitmap) { super.onPostExecute(bitmap); if (imageView.getTag().equals(url)) { imageView.setImageBitmap(bitmap); } } }
这个AsyncTask我们重写了doInBackground用来异步下载图像,重写了onPostExecute来将图像设置到ImageView上。因此,我们将AsyncTask的三个泛型参数设置为:
AsyncTask<String, Void, Bitmap>
即参数类型为String——url,进度类型——Void 不需要,返回类型——Bitmap 下载的图像。在设置图像的时候,我们同样需要通过tag来进行判断。
/** * Using ASyncTask * @param imageView * @param url */ public void showImageByASync(ImageView imageView, String url) { ASyncDownloadImage task = new ASyncDownloadImage(imageView, url); task.execute(url); }
- execute方法只能在UI线程中调用
- AsyncTask实例也必须在UI线程中创建
- AsyncTask的抽象方法不要手动去调用,系统自动会去管理
- AsyncTask只能执行一次
mImageLoader.showImageByASync(viewHolder.imageView, url);
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。