Android异步处理AsyncTask

发布于:2024-07-06 ⋅ 阅读:(29) ⋅ 点赞:(0)

1. AsyncTask

AsyncTask的特点:

    任务在主线程之外运行,而回调方法是在主线程中执行,这就有效地避免了使用Handler带来的麻烦。

AsyncTask中包括:

     有预处理的方法onPreExecute

    有后台执行任务的方法doInBackground(  相当于Thread中的run函数),        onProgressUpdate(Progress...),在publishProgress方法被调用后,UI thread将调用这个方法从而在界面上展示任务的进展情况

    AsyncTask是使用java.util.concurrent框架来管理线程以及任务的执行的,concurrent框架是一个非常成熟,高效的框架,经过了严格的测试。这说明AsyncTask的设计很好的解决了匿名线程存在的问题。

 AsyncTask是抽象类,子类必须实现抽象方法doInBackground(Params... p) ,在此方法中实现任务的执行工作,比如连接网络获取数据等。

通常还应该实现onPostExecute(Result r)方法,因为应用程序关心的结果在此方法中返回。

需要注意的是AsyncTask一定要在主线程中创建实例。

AsyncTask中有三个参数泛型类型:

 class MyTask extends AsyncTask<参数1,参数2,参数3>{ }

参数1:向后台任务的执行方法传递参数的类型

参数2:在后台任务执行过程中,要求主UI线程处理中间状态,通常是一些UI处理中传递的参数类型

参数3:后台任务执行完返回时的参数类型

AsyncTask的执行分为4个步骤:

  1     onPreExecute()

  2     doInBackground(Params...)

  3)     onProgressUpdate(Progress...)

  4      onPostExecute(Result)

2.使用AsyncTask异步加载网络图片

创建网络异步加载任
1	class AsyncLoadTask extends AsyncTask<String, Integer, Bitmap> {
2		@Override
3		protected Bitmap doInBackground(String... params) {
4			Bitmap bitmap = downloadImage();
5			return bitmap;
6		}
7		@Override
8		protected void onPostExecute(Bitmap bitmap) {
9			if(result != null) {
10				mImage.setImageBitmap(bitmap);
11			} else

12				mImage.setBackgroundResource(R.drawable.icon);
13			super.onPostExecute(bitmap);
14			mProcessDialog.setVisibility(View.GONE);
15		}
16		@Override
17		protected void onProgressUpdate(Integer... values) {
18			mProcessDialog.setProgress(values[0]);
19			super.onProgressUpdate(values);
20		}
21		@Override
22		protected void onPreExecute() {
23			mProcessDialog.setVisibility(View.VISIBLE);
24			mProcessDialog.setProgress(0);
25			super.onPreExecute();
26		}
27	}


网站公告

今日签到

点亮在社区的每一天
去签到