AsyncTask的使用方法(图文并茂)

android中UI线程不能执行耗时的操作,否则会抛出异常。因此,如果需要执行一个耗时的任务比如从网络上下载图片,就需要另外开启一个线程。

幸运的是,android提供了一个异步任务AsyncTask框架来完成类似场景的需求。

下面通过一个例子说明了如何使用AsyncTask。该例子程序点击button,会从网络上下载一个图片,显示在ImageView中。结果如底部的图片所示

使用AsyncTask的操作步骤

一、 第一步需要继承类AsyncTask ,重写继承的方法如onPreExecute()、doInBackground()、onPostExecute()等。

二、开启一个异步任务。只需new出继承了类AsyncTask的对象,调用execute方法就可开始执行。例如:new myAsyncTask().execute(path);

AsyncTask(String, Void, Bitmap); AsyncTask可以接收三个参数,第一个参数通常为要执行的路径,通常是网络路径、第二个参数表示进度、第三个参数表示执行任务的返回结果

下面自定义了一个类继承AsyncTask

private class myAsyncTask extends AsyncTask<String, Void, Bitmap> {
		// 更新UI线程中内容
		@Override
		protected void onPostExecute(Bitmap result) {
			// TODO Auto-generated method stub
			super.onPostExecute(result);
			imageview.setImageBitmap(result);
			dialog.dismiss();
		}

		// 开始开启异步任务时执行
		@Override
		protected void onPreExecute() {
			// TODO Auto-generated method stub
			super.onPreExecute();
			dialog.show();
		}

		// 执行耗时的操作
		@Override
		protected Bitmap doInBackground(String... params) {
			// TODO Auto-generated method stub
			// 使用网络链接类HttpClient完成网络数据的提取
			HttpClient httpclient = new DefaultHttpClient();
			HttpGet httpget = new HttpGet(params[0]);
			Bitmap bitmap = null;
			try {
				HttpResponse httpresponse = httpclient.execute(httpget);
				if (httpresponse.getStatusLine().getStatusCode() == 200) {
					HttpEntity httpEntity = httpresponse.getEntity();
					byte[] data = EntityUtils.toByteArray(httpEntity);
					bitmap = BitmapFactory
							.decodeByteArray(data, 0, data.length);
				}
			} catch (ClientProtocolException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			return bitmap;
		}

	}

接下来开启一个AsyncTask

	@Override
	public void onClick(View v) {
		// TODO Auto-generated method stub
		switch (v.getId()) {
		case R.id.button:
			new myAsyncTask().execute(path);
			break;
		default:
			break;
		}

	}


                                      

完整的例子代码可以点击下面链接进行下载。

项目的完整代码下载 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值