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
  • 相关阅读:
    搜索回车跳转页面
    登录验证码
    【排序算法】排序算法之插入排序
    PAT 乙级 1044 火星数字 (20 分)
    PAT 甲级 1035 Password (20 分)
    PAT 甲级 1041 Be Unique (20 分)
    PAT 甲级 1054 The Dominant Color (20 分)
    PAT 甲级 1027 Colors in Mars (20 分)
    PAT 甲级 1083 List Grades (25 分)
    PAT 甲级 1005 Spell It Right (20 分)
  • 原文地址:https://www.cnblogs.com/Godfunc/p/6131074.html
Copyright © 2011-2022 走看看