Android AsyncTask详解及使用方法
Android AsyncTask详解及使用方法
简介:
AsyncTask就是一个封装过的后台任务类,顾名思义就是异步任务。
AsyncTask,是android提供的轻量级的异步类,可以直接继承AsyncTask,在类中实现异步操作,并提供接口反馈当前异步执行的程度(可以通过接口实现UI进度更新),最后反馈执行的结果给UI主线程.
一、如果想自定义一个AsyncTask,可以写一个类,继承AsyncTask。
eg: 、
//第一个参数为doInBackground中传入的类型,第二个为doInBackground中更新的参数的类型,第三个为doInBackground完成后传出的参数。
class MyAsyncTask extends AsyncTask<String, Integer, String> { . . .}
注意有一个方法必须实现,就是
protected String doInBackground(String... params) { . . . }
一般来说,如果自定义的AsyncTask只针对一个Activity使用的话(跟Adapter差不多),那么推荐使用匿名内部类。
如果是在不同的类都需要调用的话,那么要把自定义的AsyncTask写在一个新类里面,并且需要在定义的AsyncTask中写一个完成的回调。
二、使用方法:
MyAsyncTask myAsyncTask = new MyAsyncTask(); //参数即为doInBackground中传入的参数。 myAsyncTask.execute(“Hello”);
三、停止正在执行的task的方法:
可以参考此目录下的 “AsyncTask各方法调用示例及详解”
四、必看详解:
要使用AsyncTask工作我们要提供三个泛型参数,并重载几个方法(至少重载一个)。
AsyncTask定义了三种泛型类型 Params,Progress和Result:
Params 启动任务执行的输入参数,比如HTTP请求的URL。
Progress 后台任务执行的百分比。
Result 后台执行任务最终返回的结果,比如String。
使用过AsyncTask 的同学都知道一个异步加载数据最少要重写以下这两个方法:
doInBackground(Params…) 后台执行,比较耗时的操作都可以放在这里。注意这里不能直接操作UI。此方法在后台线程执行,完成任务的主要工作,通常需要较长的时间。在执行过程中可以调用public publishProgress(Progress…)来更新任务的进度。
onPostExecute(Result) 相当于Handler 处理UI的方式,在这里面可以使用在doInBackground 得到的结果处理操作UI。 此方法在主线程执行,任务执行的结果作为此方法的参数返回
有必要的话你还得重写以下这三个方法,但不是必须的:
onProgressUpdate(Progress. . .) 在publishProgress方法被调用后,可以使用进度条增加用户体验度。 此方法在主线程执行,用于显示任务执行的进度。
onPreExecute() 这里是最终用户调用Excute时的接口,当任务执行之前开始调用此方法,可以在这里显示进度对话框。
onCancelled() 用户调用取消时,要做的操作
使用AsyncTask类,以下是几条必须遵守的准则:
1.Task的实例必须在UI thread中创建;
2.execute方法必须在UI thread中调用;
3.不要手动的调用onPreExecute(), onPostExecute(Result),doInBackground(Params...),onProgressUpdate(Progress...)这几个方法;
4.该task只能被执行一次,否则多次调用时将会出现异常;
感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!
相关推荐
-
Android AsyncTask的优缺点详解
1.Asynctask简介 1.1 使用方法简介 Asynctask作为Android的基础之一,怎么使用就不多讲解了,网上到处都是教程,建议查看Android官方API文档:https://developer.android.google.cn/reference/android/os/AsyncTask.html 这里只实现一个小Demo程序,供大家赏玩: 界面: 这个程序其实特别简单,就是两个按钮,点击分别用来测试AysncTask和Handler两种模式的实现,点击后会有相应的Log提示
-
Android多线程AsyncTask详解
本篇随笔将讲解一下Android的多线程的知识,以及如何通过AsyncTask机制来实现线程之间的通信. 一.android当中的多线程 在Android当中,当一个应用程序的组件启动的时候,并且没有其他的应用程序组件在运行时,Android系统就会为该应用程序组件开辟一个新的线程来执行.默认的情况下,在一个相同Android应用程序当中,其里面的组件都是运行在同一个线程里面的,这个线程我们称之为Main线程.当我们通过某个组件来启动另一个组件的时候,这个时候默认都是在同一个线程当中完成的.当然
-
Android使用AsyncTask下载图片并显示进度条功能
在Android中实现异步任务机制有两种方式,Handler和AsyncTask.这篇文章给大家介绍Android使用AsyncTask下载图片并显示进度条功能. AsyncTask下载图片并显示下载进度,异步类AsyncTask配合进度条,简练! public class AsyncTaskActivity2 extends Activity { private Button btnDown;//图片框 private ImageView ivImage;//图片URL private sta
-
Android AsyncTask实现异步处理任务的方法详解
Android AsyncTask实现异步处理任务的方法详解 在开发Android应用时必须遵守单线程模型的原则:Android UI操作并不是线程安全的并且这些操作必须在UI线程中执行. Android 单线程模型概念详解:http://www.jb51.net/article/112165.htm 在单线程模型中始终要记住两条法则: 不要阻塞UI线程 确保只在UI线程中访问Android UI工具包 当一个程序第一次启动时,Android会同时启动一个对应的主线程(Main Thread),
-
Android中使用AsyncTask实现文件下载以及进度更新提示
Android提供了一个工具类:AsyncTask,它使创建需要与用户界面交互的长时间运行的任务变得更简单.相对Handler来说AsyncTask更轻量级一些,适用于简单的异步处理,不需要借助线程和Handter即可实现.AsyncTask是抽象类.AsyncTask定义了三种泛型类型Params,Progress和Result: Params启动任务执行的输入参数,比如,HTTP请求的URL. Progress后台任务执行的百分比. Result后台执行任务最终返回的结果,比如String.
-
Android带进度条的下载图片示例(AsyncTask异步任务)
为什么要用异步任务? 在Android中只有在主线程才能对ui进行更新操作,而其它线程不能直接对ui进行操作 android本身是一个多线程的操作系统,我们不能把所有的操作都放在主线程中操作 ,比如一些耗时操作.如果放在主线程中 会造成阻塞 而当阻塞事件过长时 系统会抛出anr异常.所以我们要使用异步任务.android为我们提供了一个封装好的组件asynctask. AsyncTask可以在子线程中更新ui,封装简化了异步操作.适用于简单的异步处理.如果多个后台任务时就要使用Handler了
-
Android中使用AsyncTask实现下载文件动态更新进度条功能
1. 泛型 AysncTask<Params, Progress, Result> Params:启动任务时传入的参数,通过调用asyncTask.execute(param)方法传入. Progress:后台任务执行的进度,若不用显示进度条,则不需要指定. Result:后台任务结束时返回的结果. 2. 重要方法 doInBackground(Params... params):必须重写的方法,后台任务就在这里执行,会开启一个新的线程.params为启动任务时传入的参数,参数个数不定. on
-
详解Android 中AsyncTask 的使用
详解Android 中AsyncTask 的使用 1.首先我们来看看AsyncTask 的介绍: Handler 和 AsyncTask 都是android 中用来实现异步任务处理的方式:其中: Handler 实例向 UI 线程发送消息,完成界面更新, 优点:对整个过程控制的比较精细: 缺点:代码相对臃肿,多个任务同时执行时,不易对线程进行精确的控制: AsyncTask :比Handler 更轻量级一些,适用于简单的异步处理: 优点:简单 | 快捷 | 过程可控:
-
Android AsyncTask详解及使用方法
Android AsyncTask详解及使用方法 简介: AsyncTask就是一个封装过的后台任务类,顾名思义就是异步任务. AsyncTask,是android提供的轻量级的异步类,可以直接继承AsyncTask,在类中实现异步操作,并提供接口反馈当前异步执行的程度(可以通过接口实现UI进度更新),最后反馈执行的结果给UI主线程. 一.如果想自定义一个AsyncTask,可以写一个类,继承AsyncTask. eg: . //第一个参数为doInBackground中传入的类型,第二个为
-
Android CardView详解及使用方法和实例
Android CardView详解 Android5.0中向我们介绍了一个全新的控件–CardView,从本质上看,可以将CardView看做是FrameLayout在自身之上添加了圆角和阴影效果.请注意:CardView被包装为一种布局,并且经常在ListView和RecyclerView的Item布局中,作为一种容器使用. 发现个好看的东东 CardView,他在support v7包中~~ 顾名思义就是卡片view,可以设置阴影,圆角,等等.. 样子是这样的: 或者你还可以放到list
-
Android CardView详解及使用方法和实例
Android CardView详解 Android5.0中向我们介绍了一个全新的控件–CardView,从本质上看,可以将CardView看做是FrameLayout在自身之上添加了圆角和阴影效果.请注意:CardView被包装为一种布局,并且经常在ListView和RecyclerView的Item布局中,作为一种容器使用. 发现个好看的东东 CardView,他在support v7包中~~ 顾名思义就是卡片view,可以设置阴影,圆角,等等.. 样子是这样的: 或者你还可以放到list
-
Android CoordinatorLayout详解及实例代码
Android CoordinatorLayout详解 一.CoordinatorLayout有什么作用 CoordinatorLayout作为"super-powered FrameLayout"基本实现两个功能: 1.作为顶层布局 2.调度协调子布局 CoordinatorLayout使用新的思路通过协调调度子布局的形式实现触摸影响布局的形式产生动画效果.CoordinatorLayout通过设置子View的 Behaviors来调度子View.系统(Support V7)提供了A
-
Android Bitmap详解及Bitmap的内存优化
Android Bitmap详解及Bitmap的内存优化 一.Bitmap: Bitmap是Android系统中的图像处理的最重要类之一.用它可以获取图像文件信息,进行图像剪切.旋转.缩放等操作,并可以指定格式保存图像文件. 常用方法: public void recycle() // 回收位图占用的内存空间,把位图标记为Dead public final boolean isRecycled() //判断位图内存是否已释放 public final int getWidth() //获取位图的
-
Android ToggleButton 详解及实例代码
Android ToggleButton 详解 在Android的开发过程中,对于ToggleButton的使用频率也是相当的高的,下面我就来说一下,这个组件的两种使用方式. 第一种是简单的使用,利用Toast的方式弹出提示语句 需要注意的是要想自定义ToggleButton的显示的内容,就需要设置其TextOn和TextOff的内容. <ToggleButton android:id="@+id/toggleButton1" android:layout_width="
-
Android RecyclerView详解之实现 ListView GridView瀑布流效果
什么是RecyclerView RecyclerView 是Google推出的最新的 替代ListView.GridView的组件,RecyclerView是用来显示大量数据的容器,并通过有限数量的子View,来提高滚动时的性能. 与ListView不同,RecyclerView 不再负责布局,而是专注于布局复用.布局主要通过 LayoutManager来管理,目前提供了3种常用的布局管理: LinearLayoutManager 线性布局管理器 (ListView效果) GridLayout
-
Android IntentService详解及使用实例
Android IntentService详解 一.IntentService简介 IntentService是Service的子类,比普通的Service增加了额外的功能.先看Service本身存在两个问题: Service不会专门启动一条单独的进程,Service与它所在应用位于同一个进程中: Service也不是专门一条新线程,因此不应该在Service中直接处理耗时的任务: 二.IntentService特征 会创建独立的worker线程来处理所有的Intent请求: 会创建独立的wor
-
mysql 5.7.20解压版安装方法步骤详解(两种方法)
我来讲解下window64位下MySQL的安装,MySQL是在5.7开始安装版就只有32位下载服务了,这里我讲解解压版的MySQL如何安装,在安装MySQL解压版时对于新手的小编来说也是头疼得很,各种问题各种来没有安装版的一键轻松搞定的方便,安装时需要注意三点:1.路径配置,2.安装时MySQL端口被占用这时需要关闭被占用端口,3.cmd必须是在管理员环境下设置MySQL信息. MySQL官网: https://www.mysql.com/downloads/ http://www.jb51.n
-
详解Struts2动态方法调用
动态方法就是一个Action对应多个请求,减少Action的数量 1.指定method属性 <action name="addAction" method="add" class="com.venn.action.HelloWorldAction"> <result>/jsp/add.jsp</result> </action> 2.感叹号(!)方式(不推荐使用) <action name=&
随机推荐
- 浅谈对Jquery+JSON+WebService的使用小结
- java使用xpath和dom4j解析xml
- java实现整数转化为中文大写金额的方法
- 基于react组件之间的参数传递(详解)
- JS实现基于Sketch.js模拟成群游动的蝌蚪运动动画效果【附demo源码下载】
- 在Mac OS下搭建LNMP开发环境的步骤详解
- 十天学会php之第四天
- MySQL中join语句的基本使用教程及其字段对性能的影响
- Java8中对泛型目标类型推断方法的改进
- 网页javascript精华代码集
- IE6,IE7,IE8下使用Javascript记录光标选中范围(已补全)
- IIS7 fastcgi方式安装php
- C#在子线程中更新窗口部件的写法
- C#禁用双击窗体图标关闭窗体的方法
- Python决策树和随机森林算法实例详解
- mysql 获取昨天日期、今天日期、明天日期以及前一个小时和后一个小时的时间
- 实例分析Java单线程与多线程
- iOS开发中Swift逃逸闭包知识
- C++为什么要用指针而不直接使用对象?
- vue弹窗消息组件的使用方法