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.youkuaiyun.com/detail/lyt819/8184371