首页 > 代码库 > AsyncTask的初步了解
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()方法中做耗时操作。
AsyncTask的初步了解
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。