android开发多线程之AsyncTask

  次阅读 作者:智能小宝 来源:互联网 2016-01-14 12:39 我要评论(0)

AsyncTask

AsyncTask,异步任务,可以简单进行异步操作,并把执行结果发布到UI主线程。AsyncTask是一个抽象类,它的内部其实也是结合 了Thread和Handler来实现异步线程操作,但是它形成了一个通用线程框架,更清晰简单。AsyncTask应该被用于比较简短的操作(最多几秒 钟)。如果需要保持长时间运行的线程,可以使用ThreadPooExecutor或者FutureTask,关于这两个类的内容,以后再介绍,本片博客 主要介绍AsyncTask。

AsyncTask被定义为一个操作,运行在一个后台线程中,其结果被发布在UI线程上。它的异步工作的参数与返回值被泛型的三个参数指 定:Params、Progress、Result。AsyncTask将经历4个步骤:onPreExecute、doInBackground、 onProgressUpdate、onPostExecute。下面详细讲解这三个参数与四个步骤:

三个泛型参数:

Params:被发送到执行任务的参数类型。

Progress:进度的类型,发送后台的计算进度到UI线程类型。

Result:异步任务的返回结果类型。

一个异步任务将经历四个阶段:

onPreExecute():执行在UI线程上调用执行任务之前,一般用于设置任务。

doInBackground(Params...):主要是用来执行异步任务的耗时操作,可以在这个方法中通过 publishProgress()方法发布进度信息,并在执行完成之后,返回执行结果。

onProgreddUpdate(Progress...):在UI线程上接受doInBackground()传递过来的进度信息, 并在UI线程上展示进度信息,它执行的时机是不确定的。

onPostExecute(Result):在UI线程上操作doInBackground()执行的返回值。

上面介绍的四个步骤的示意图:

AsyncTask取消任务

在程序的任何位置,都可以通过cancel(boolean)方法进行取消任务,当取消任务之后,会改变isCancelled()的返回值, 使其返回true。之后会调用onCancelled(Object)方法,替代onPostExecute()得到doInBackground()的 返回结果。在运行中,可以经常通过isCancelled()方法查看任务是否被取消。

AsyncTask的使用规则

使用AsyncTask必须遵循以下规则:

%20%20%20%20

AsyncTask必须声明在UI线程上。

%20%20%20%20

AsyncTask必须在UI线程上实例化。

%20%20%20%20

必须通过execute()方法执行任务。

%20%20%20%20

不可以直接调用onPreExecute()、onPostExecute(Resut)、 doInBackground(Params...)、onProgressUpdate(Progress...)方法。

%20%20%20%20

可以设置任务只执行一次,如果企图再次执行会报错。

示例

一个简单的示例,通过AsyncTask下载一个网络上的图片,下载的时候展示一个等待框,并显示在一个ImageView中。

实现代码:

%201%20package%20com.bgxt.datatimepickerdemo;

%202%20

%203%20import%20org.apache.http.HttpEntity;

%204%20import%20org.apache.http.HttpResponse;

%205%20import%20org.apache.http.client.HttpClient;

%206%20import%20org.apache.http.client.methods.HttpGet;

%207%20import%20org.apache.http.impl.client.DefaultHttpClient;

%208%20import%20org.apache.http.util.EntityUtils;

%209%20

10%20import%20android.app.Activity;

11%20import%20android.app.ProgressDialog;

12%20import%20android.graphics.Bitmap;

本站文章信息来源于网络以及网友投稿,本站只负责对文章进行整理、排版、编辑,是出于传递更多信息之目的,并不意味着赞同其观点或证实其内容的真实性。如果您有什么意见或建议,请联系QQ28-1688-302!

人工智能实验室
相关文章相关文章
  • 英国研发“杀生”机器人 通过生命体获取能量

    英国研发“杀生”机器人 通过生命体获取能量

  • 无人驾驶汽车如何改变城市生活?听听他们怎么说

    无人驾驶汽车如何改变城市生活?听听他们怎么说

  • 韩春雨称已能重复实验结果 近期将有消息公布

    韩春雨称已能重复实验结果 近期将有消息公布

  • 未来两年人工智能要怎么走?看这篇就够了

    未来两年人工智能要怎么走?看这篇就够了

网友点评网友点评
阅读推荐阅读推荐

据国外媒体报道,在过去两年内,聊天机器人(chatbot)、人工智能以及机器学习的研发和采用取得了巨大进展。许多初创公司正利用人工智能和...

霍金 视觉中国 图 英国著名物理学家霍金(Stephen Hawking)再次就人工智能(AI)发声,他认为:对于人类来说,强大AI的出现可能是最美妙的...

文|郑娟娟 今年,人工智能(AI) 60岁了。在AI60岁的时候,笔者想要介绍一下AI100,一个刚刚2岁的研究项目,但它的预设寿命是100年,甚至更长...

AlphaGo与李世石的人机大战,为大众迅速普及了人工智能的概念。 但对谷歌而言,除了下围棋,现在的人工智能进展到哪一步了?未来,人工智能...