AsyncTask 异步任务基本使用--下载视频

转载请注明出处:http://blog.csdn.net/vnanyesheshou/article/details/73613706

本文已授权微信公众号 fanfan程序媛 独家发布 扫一扫文章底部的二维码或在微信搜索 fanfan程序媛 即可关注


1 简介

在Android中,我们需要将一些耗时的操作放到子线程中,如果放在UI线程会造成主线程阻塞,出现ANR。在子线程中处理耗时操作,需要进行更新UI,一般的做法是通过Handler发送消息到UI线程进行处理,相对来说使用Handler的代码比较臃肿。对于Handler的知识可以看这两篇文章: Android Handler的基本使用深入理解Handler、Looper、Messagequeue
Android 提供了一个异步任务类AsyncTask,使创建异步任务、更新UI变得更加简单,不再需要编写任务线程和Handler实例即可完成相同的任务。


2 AsyncTask

AsyncTask 允许在UI线程上执行后台操作和发布结果,而不必操作Thread和Handler。
它是围绕Thread和Handler设计的一个辅助类,主要应用于短操作(最多几秒)。如果想要运行长时间的任务,强烈建议使用Executor、ThreadPoolExecutor和FuterTask。

AsyncTask:一个在后台线程上运行,而结果在UI线程上发布的任务。异步任务必须被继承使用,子类至少覆盖一个方法(doInBackground)。异步任务用到了3个泛型类型:

  • Params:执行任务时发送给任务的参数类型。
  • Progress:后台任务执行期间,发布的进度、百分比。
  • Result:后台计算的结果类型。

异步任务中,并不是所有的泛型类型都要被使用,如果某个类型不需要使用,只需要使用Void类型就可以。如:

private  class MyTask extends AsyncTask<Void, Void, Void>{
   ....}。

2.1 任务执行步骤

执行一个异步任务需要经历4个步骤:

  1. onPreExecute():在UI线程上调用execute方法后,执行onPreExecute(运行在UI线程上)。此步骤通常用于设置任务,例如在用户界面显示进度条。
  2. doInBackground(Params…):执行完onPreExecute后,立即在后台线程运行,此步骤可能需要长时间的后台计算。execute()参数也被传到这步。计算结果必须由这步骤返回,并返回到最后一步。这一步骤也可以使用publishProgress发布任务的进度,进度会被发送到onProgressUpdate。
  3. onProgressUpdate(Progress…):调用publishProgress后,执行该步骤(运行在UI线程),执行时间是不确定的。这个方法用于在后台计算仍在执行时在用户界面显示进度。例如:用一个进度条显示下载视频的百分比。
  4. onPostExecute(Result):后台计算(doInBackground)完成时,在UI线程运行该方法。后台计算结果作为一个
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值