AsyncTask的初步了解
下面以下载图片并显示为例:
首先我们需要知道的是AsyncTask是对线程池+Handler的进一步封装。
下面看一个简单的代码:
public class MainActivity extends Activity { private ImageView ivIcon; private static String myUrl = "http://192.168.1.2:8080/tomcat.gif";//图片的ip地址 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ivIcon = (ImageView)findViewById(R.id.iv_icon); new MyTask().execute(myUrl);// 启动AsyncTask } // AsyncTask 异步封装的工具, 可以实现异步请求及主界面更新(对线程池+handler的封装) class MyTask extends AsyncTask<String,Integer,Bitmap>{ // 1.预加载, 运行在主线程 @Override protected void onPreExecute() { super.onPreExecute(); } // 2.正在加载, 运行在子线程(核心方法), 可以直接异步请求 @Override protected Bitmap doInBackground(String... params) { return downLoad(params[0]); } // 3.更新进度的方法, 运行在主线程 @Override protected void onProgressUpdate(Integer... values) { super.onProgressUpdate(values); } // 4.加载结束, 运行在主线程(核心方法), 可以直接更新UI @Override protected void onPostExecute(Bitmap bitmap) { ivIcon.setImageBitmap(bitmap); } } /** * 从服务器下载图片 * @param url 服务器的IP * @return 请求成功返回Bitmap对象,不成功返回null */ private Bitmap downLoad(String url){ try { HttpURLConnection conn = (HttpURLConnection) new URL(url).openConnection(); conn.setRequestMethod("GET"); conn.setConnectTimeout(5000); conn.setReadTimeout(5000); conn.connect(); int code = conn.getResponseCode(); if (code==200){ InputStream inputStream = conn.getInputStream(); Bitmap bitmap = BitmapFactory.decodeStream(inputStream); return bitmap; } } catch (IOException e) { e.printStackTrace(); } return null; } }
需要注意的是AsyncTask里面的doInBackground()方法是运行在子线程的,剩下的三个方法是运行在主线程的。所以我们在doInBackground()方法中做耗时操作。
AsyncTask的初步了解的更多相关文章
- 异步任务——AsyncTask的初步认识
ProgressBar_test.class package com.example.administrator.ten_9; import android.app.Activity; import ...
- AsyncTask中各个函数详细的调用过程,初步实现异步任务
AsyncTask内部类可能会产生内存泄露的问题 解决上述内部类可能引起的内存泄露问题的方法 将AsyncTask或者Thread的子类作为单独的类文件,不持有Activity的强引用 将Async ...
- Dagger2 使用初步
Dagger2 是一个Android依赖注入框架,由谷歌开发,最早的版本Dagger1 由Square公司开发.依赖注入框架主要用于模块间解耦,提高代码的健壮性和可维护性.Dagger 这个库的取名不 ...
- AsyncTask 轻量级的异步类
初步:http://www.cnblogs.com/devinzhang/archive/2012/02/13/2350070.html 详细:http://blog.csdn.net/liuhe68 ...
- android高级---->AsyncTask的源码分析
在Android中实现异步任务机制有两种方式,Handler和AsyncTask,它在子线程更新UI的例子可以参见我的博客(android基础---->子线程更新UI).今天我们通过一个小的案例 ...
- 移动端之Android开发的几种方式的初步体验
目前越来越多的移动端混合开发方式,下面列举的大多数我都略微的尝试过,就初步的认识写个简单的心得: 开发方式 开发环境 是否需要AndroidSDK 支持跨平台 开发语言&技能 MUI Win+ ...
- Android 旋转屏幕--处理Activity与AsyncTask的最佳解决方案
一.概述 运行时变更就是设备在运行时发生变化(例如屏幕旋转.键盘可用性及语言).发生这些变化,Android会重启Activity,这时就需要保存activity的状态及与activity相关的任务, ...
- CSharpGL(29)初步封装Texture和Framebuffer
+BIT祝威+悄悄在此留下版了个权的信息说: CSharpGL(29)初步封装Texture和Framebuffer +BIT祝威+悄悄在此留下版了个权的信息说: Texture和Framebuffe ...
- Android笔记——AsyncTask介绍
AsyncTask和Handler对比 1 ) AsyncTask实现的原理,和适用的优缺点 AsyncTask,是android提供的轻量级的异步类,可以直接继承AsyncTask,在类中实现异步操 ...
随机推荐
- 有一个小效果而引出的appendTo()函数。
在公司做项目的时候,始终不了解信息逐条向上滚的动画效果,后来查阅相关资料,终于明白了,在这个过程中,让我对appendTo这个函数有了一个全新的认识.话不多说,首先是demo: <!DOCTYP ...
- 参加了iDOF2016会议,发表演讲“油田SOA与云平台的系统思考与实践”
PPT的全部抓图,扫描二维码直接到微信里去看吧:
- tableview左滑按钮 tableviewcell自定义左滑按钮
当我们在使用tableview时,往往需要在cell左滑时显示一个或是多个按钮,但系统默认的只可显示一个,如常见的删除按钮,那么当我们的需求要求要有多个按钮时又该怎么办呢,我们往下看. 首先,现看看系 ...
- h5滑动方向、手机拖动层
做h5时需对手指滑动方向判断及拖动浮动层,本文代码适用于手机端h5页面,pc页面可使用onMouseDown.onMouseUp.onMouseMove.(本方法仅为功能实现原理和演示,可根据自己的需 ...
- Linux 平台MySQL启动关闭方式总结
MySQL的启动方法有很多种,下面对比.总结这几种方法的一些差异和特性,下面实验的版本为MySQL 5.6.如有疏漏或不足,敬请指点一二. 1:使用mysqld启动.关闭MySQL服务 mysql ...
- 归档—监控ORACLE数据库告警日志
ORACLE的告警日志里面包含许多有用的信息,尤其是一些ORACLE的ORA错误信息,所以有必要及时归档.监控数据库告警日志的ORA错误,及时提醒数据库管理员DBA处理这些错误信息,那么我们首先来看看 ...
- Python中的绝对路劲和相对路径
1.绝对路径 os.path.abspath("文件名"): 显示的是一个文件的绝对路劲 eg: >>> import os >>> os.ch ...
- HTML入门篇
HTML HTML是英文Hyper Text Mark-up Language(超文本标记语言)的缩写,他是一种制作万维网页面标准语言(标记).相当于定义统一的一套规则,大家都来遵守他,这样就可以让浏 ...
- mysql 主从复制配置
环境:已经在centos下安装好mysql,安装参考:http://www.cnblogs.com/bookwed/p/5896619.html,安装好主数据库后,可以克隆一份,注意修改ip等. 19 ...
- TCP通信丢包原因总结
今天在公司问老大,公司的项目底层,是使用的TCP,因为可靠,自动断线重连,在底层都实现了,但是我记得TCP也会有掉包的问题,所以这文章就诞生了——关于TCP掉包的问题,TCP是基于不可靠的网络实现可靠 ...