1 /*AsyncTask 异步任务即做一些简单的异步处理 ;是handle与线程池的封装
2 * 第一个泛型:参数类型泛型
3 * 第二个泛型:更新进度泛型
4 * 第三个泛型:onProgressUpdate的返回结果的泛型
5 *
6 */
7
8 class BitmapTask
extends AsyncTask<Object, Void, Bitmap>
{
9
10 private ImageView pic;
11 private String murl;
12 /**
13 * 后台耗时方法在此执行,子线程
14 */
15 @Override
16 protected Bitmap doInBackground(Object... params) {
17 pic = (ImageView) params[0
];
18 murl = (String) params[1
];
19
20 pic.setTag(murl);
//将图片与url绑定
21 return downloadBitmap(murl);
22 }
23 /**
24 * 更新进度,主线程
25 */
26 @Override
27 protected void onProgressUpdate(Void... values) {
28 // TODO Auto-generated method stub
29 super.onProgressUpdate(values);
30 }
31 /**
32 * 后台耗时方法结束之后,在此执行,主线程
33 */
34 @Override
35 protected void onPostExecute(Bitmap result) {
36 if(result!=
null){
37
38 String tag =
(String) pic.getTag();
39 if(tag.equals(murl)){
40 pic.setImageBitmap(result);
41 }
42
43 }
44 mlocalcacheutils.setBitmapTolocal(murl, result);
45 mmemorycacheutils.setBitmapTomemory(murl, result);
46 }
47 }
1 /**
2 *
3 * 下载图片
4 * @return
5 */
6 private Bitmap downloadBitmap(String url){
7 HttpURLConnection conn=
null;
8 try {
9 conn=(HttpURLConnection)
new URL(url)
10 .openConnection();
11
12 conn.setConnectTimeout(5000
);
13 conn.setReadTimeout(5000
);
14 conn.setRequestMethod("GET"
);
15 conn.connect();
16
17 int responseCode = conn.getResponseCode();
//响应码
18
19 if(responseCode==200){
//表示成功连接
20 InputStream inputStream =
conn.getInputStream();
21
22 //图片的压缩设置
23 BitmapFactory.Options option=
new Options();
24 option.inSampleSize=2;
//表示将图片压缩原来的二分之一,需要根据图片的大小来计算出压缩值的大小
25 option.inPreferredConfig=Bitmap.Config.RGB_565;
//通过设置图片的格式即像素大小来进行图片的压缩
26
27 Bitmap bitmap = BitmapFactory.decodeStream(inputStream,
null,option);
28 return bitmap;
29 }
30
31 }
catch (IOException e) {
32
33 e.printStackTrace();
34 }
35 finally{
36 conn.disconnect();
37 }
38 return null;
39
40 }
最后使用
1 public void getBitmapFromNet(ImageView iv_photo, String url) {
2 // TODO Auto-generated method stub
3 BitmapTask bitmaptask=
new BitmapTask();
4 bitmaptask.execute(iv_photo,url);
//开启AsyncTask,参数在doInBackground获取
5 }
转载于:https://www.cnblogs.com/wangying222/p/5611917.html