为了账号安全,请及时绑定邮箱和手机立即绑定

AsyncTask类

标签:
Android

1、定义

        异步任务类,在类中实现异步操作,并提供回调方法反馈当前异步执行的程度,最后反馈 的结果提供给UI主线程。

        <1>Android线程

                (1)MainThread主线程(也称UI线程):应用启动时创建,处理与UI相关事情,如点击事件、数据更新;

                (2)WorkerThread子线程:Android4.0之后UI线程不能访问网络资源或执行耗时操作,必须开启子线程;

        <2>主、子线程必须遵循的两条规则:

                (1)Do    not    block    the    UI    thread.(主线程不能被阻塞) 

                (2)Do    not    access    the    Android    UI    toolkit    from    outside    the    UI    thread.(非主线程不能更新UI)

        <3>回调方法

                (1)必须实现的方法

                                doInBackground(Params...params)后台执行的任务;在子线程中调用的方法,要做耗时操作就在这个方法中执行;

                                doPostExecute(Result result)任务完成,UI线程执行;在主线程中执行,在doInBackground之后调用,doInBackground返回的结果就到了这个方法中;

                (2)其他实现方法

                                onPreExecute()后台任务开始之前的准备工作,UI线程执行;在主线程中执行,在doInBackground之前,在这个方法中一般做耗时操作之前的准备工作;

                                onProgressUpdate(Progress... values) 当前执行的进度,UI主线程执行;在主线程中运行,用来发布进度值;作用:一般用于更新UI中的ProgressBar进度条;用法:必须在doInBackground的方法体中调用 publishProgress(Progress... values)方法

                                onCancelled() 取消任务,任务正在执行的情况;在主线程中执行。取消下载任务,doInBackground()方法就不会再继续执行;在启动异步任务的类中调用取消异步任务的方法 XXX.cancel(true);

        <4>AsyncTask的一般用法:

                (1)创建类,继承AsyncTask,并指定三个泛型

public class ImgAsy extends AsyncTask<String, Integer, Bitmap>

                                第一个泛型:Params,执行下载任务的地址类型,一般是请求的URL或String;决定了doInBackground()方法的参数类型;

                                第二个泛型:Progress,显示进度值得类型,常用类型是Integer;决定了onProgressUpdate()方法的参数类型;

                                第三个泛型:Result,下载线程执行完成后返回的结果,常用Bitmap;决定了doInBackground()方法的返回值类型,决定了onPostExecute的参数类型

                (2)重写两个必要的方法

                (3)重写可选的方法

                (4)在UI线程中,实例化AsyncTask对象,并将UI控件作为构造参数传入;

                (5)在UI线程中,执行AsyncTask对象的execute(...)方法,开始执行异步任务;

                (6)异步开始执行后,执行AsyncTask对象的cancel(true)方法,停止异步任务;

        <5>使用AsyncTask必须遵守的准则:

                (1)三个泛型的使用位置;

                (2)Task的实例必须在UI  thread中创建;

                (3)execute方法必须在UI  thread中调用;

                (4)该Task只能被执行一次,否则多次调用时将会出现异常

原文链接:http://www.apkbus.com/blog-815579-61175.html

点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消