AsyncTask 的简单应用

本文详细介绍了AsyncTask在Android开发中的使用方法,包括其核心步骤和注意事项。并通过下载图片的实例展示了如何在UI线程外进行网络请求,确保应用程序的流畅运行。

AsyncTask 异步线程:

 

1.在Android 3.0版本以上是不能直接在UI线程中访问网络的 以免阻塞主线程

 

2.使用步骤:

   a.继承 AsyncTask 类,有三个泛型参数:

       ① params :启动任务执行的输入参数,一般是请求的地址 URL

       ②progress:后台任务(doInBackground())执行的百分比

       ③result: 后台任务(doInBackground())执行返回的结果

 

   b.重载方法:

       ① onPreExecute():后台任务执行前的预操作,可以对UI做一些标记。

       ② doInBackground (Params...): 用来执行耗时的操作

       ③ onProgressUpdate(Progress... values): 若②调用了 publishProgress() 方法,就会执行该方法,可以更新进度信息于UI上。

       ④onPostExecute(Result result):后台任务 结束后,结果传入此方法,可以将结果显示于UI之上。

 

    TIPS:①中的返回结果类型和 ④中的Result类型要一致,要对应于声明 AsyncTask 时的三个参数

 

 

下载图片的列子:

 

class MyAsyncTask extends AsyncTask<String, Void, Bitmap> {

		@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 mClient = new DefaultHttpClient();
			HttpGet mGet = new HttpGet(params[0]);
			Bitmap mBitmap = null;
			try {
				HttpResponse mResponse = mClient.execute(mGet);
				if (mResponse.getStatusLine().getStatusCode() == 200) {
					// 获取的数据转化成字节数组
					HttpEntity mEntity = mResponse.getEntity();
					byte[] pic_bit = EntityUtils.toByteArray(mEntity);

					mBitmap = BitmapFactory.decodeByteArray(pic_bit, 0,
							pic_bit.length);
				}
			} catch (Exception e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			return mBitmap;
		}

		@Override
		protected void onProgressUpdate(Void... values) {
			// TODO Auto-generated method stub
			super.onProgressUpdate(values);
		}

		@Override
		protected void onPostExecute(Bitmap result) {
			// TODO Auto-generated method stub
			super.onPostExecute(result);
			down_iv.setImageBitmap(result);
			down_tv.setText("洞房花烛夜  兵长一米六");
			dialog.dismiss();
		}
	}


 

   http://download.csdn.net/detail/lyt819/8184371

        

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值