zoukankan      html  css  js  c++  java
  • AsyncTask的初步了解

    下面以下载图片并显示为例:

    首先我们需要知道的是AsyncTask是对线程池+Handler的进一步封装。

    下面看一个简单的代码:

     1 public class MainActivity extends Activity {
     2     private ImageView ivIcon;
     3     private static String myUrl = "http://192.168.1.2:8080/tomcat.gif";//图片的ip地址
     4     @Override
     5     protected void onCreate(Bundle savedInstanceState) {
     6         super.onCreate(savedInstanceState);
     7         setContentView(R.layout.activity_main);
     8         ivIcon = (ImageView)findViewById(R.id.iv_icon);
     9         
    10         new MyTask().execute(myUrl);// 启动AsyncTask
    11     }
    12 
    13     // AsyncTask 异步封装的工具, 可以实现异步请求及主界面更新(对线程池+handler的封装)
    14     class MyTask extends AsyncTask<String,Integer,Bitmap>{
    15 
    16         // 1.预加载, 运行在主线程
    17         @Override
    18         protected void onPreExecute() {
    19             super.onPreExecute();
    20         }
    21 
    22         // 2.正在加载, 运行在子线程(核心方法), 可以直接异步请求
    23         @Override
    24         protected Bitmap doInBackground(String... params) {
    25             return  downLoad(params[0]);
    26         }
    27 
    28         // 3.更新进度的方法, 运行在主线程
    29         @Override
    30         protected void onProgressUpdate(Integer... values) {
    31             super.onProgressUpdate(values);
    32         }
    33 
    34         // 4.加载结束, 运行在主线程(核心方法), 可以直接更新UI
    35         @Override
    36         protected void onPostExecute(Bitmap bitmap) {
    37             ivIcon.setImageBitmap(bitmap);
    38         }
    39     }
    40 
    41     /**
    42      * 从服务器下载图片
    43      * @param url  服务器的IP
    44      * @return 请求成功返回Bitmap对象,不成功返回null
    45      */
    46     private Bitmap downLoad(String url){
    47         try {
    48             HttpURLConnection conn = (HttpURLConnection) new URL(url).openConnection();
    49             conn.setRequestMethod("GET");
    50             conn.setConnectTimeout(5000);
    51             conn.setReadTimeout(5000);
    52             conn.connect();
    53 
    54             int code = conn.getResponseCode();
    55 
    56 
    57             if (code==200){
    58                 InputStream inputStream = conn.getInputStream();
    59                 Bitmap bitmap = BitmapFactory.decodeStream(inputStream);
    60                 return bitmap;
    61             }
    62         } catch (IOException e) {
    63             e.printStackTrace();
    64         }
    65 
    66         return null;
    67     }
    68 }

    需要注意的是AsyncTask里面的doInBackground()方法是运行在子线程的,剩下的三个方法是运行在主线程的。所以我们在doInBackground()方法中做耗时操作。

    GitHub:https://github.com/godfunc
    博客园:http://www.cnblogs.com/godfunc
    Copyright ©2019 Godfunc
  • 相关阅读:
    浅谈FastJson的TypeReference用法
    勾选表中的行数据,点击添加,添加到另一个表中(二)
    获取表单内的所有元素的值 表单格式化插件jquery.serializeJSON
    基于BootStrap的Collapse折叠(包含回显展开折叠的对应状态)
    删除按钮和单条删除合并
    前台校验是否为空
    浅谈js的join()方法
    select前台转义后台取到的值为对应的文本 select同时接受list和map
    SpringBoot图片上传(二)
    给div拼接html 拼接字符串
  • 原文地址:https://www.cnblogs.com/Godfunc/p/6131074.html
Copyright © 2011-2022 走看看