Android-AsyncTask的javadoc文档

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

android.os.AsyncTask

AsyncTask允许简单适当的使用UI线程。这个类允许执行后台操作,然后把结果发布到UI线程,同时又免去了手动的操作线程或者是handler。

AsyncTask被设计成是线程和Handler的帮助类,并没有构建一个通用的线程框架。

AsyncTask理想的使用场景是用于执行时间短的操作(最多几秒)

如果你需要让线程长时间执行,强烈推荐使用java.util.concurrent包下面提供的api,比如: Executor, ThreadPoolExecutor和FutureTask。

一个异步的任务指的是运行在后台线程上的操作,它的执行结果会发布到UI线程上。

一个异步任务是由3个泛型类型(Params, Progress和Result)和4个执行步骤来表示的(onPreExecute, doInBackground, onProgressUpdate和onPostExecute)。

使用

必须是AsyncTask的子类才可以使用,子类需要覆盖至少一个方法(doInBackground),大多数都会覆盖第二个(onPostExecute)方法。

这是一个例子:

private class DownloadFilesTask extends AsyncTask {

protected Long doInBackground(URL... urls) {

int count = urls.length;

long totalSize = 0;

for (int i = 0; i < count; i++) {

totalSize += Downloader.downloadFile(urls[i]);

publishProgress((int) ((i / (float) count) * 100));

// Escape early if cancel() is called

if (isCancelled()) break;

}

return totalSize;

}

protected void onProgressUpdate(Integer... progress) {

setProgressPercent(progress[0]);

}

protected void onPostExecute(Long result) {

showDialog(Downloaded + result + bytes);

}

}

一旦创建以后,就可以很简单的执行任务:

new DownloadFilesTask().execute(url1, url2, url3);

AsyncTask的泛型参数

AsyncTask的三个泛型参数如下:

Params:传递给异步任务的参数

Progress:后台任务执行的进度

Result:后台任务执行的结果

并不是所有的异步任务都需要这三个参数,若果不需要,可以简单地置为Void,如下:

private class MyTask extends AsyncTask { ... }

四个步骤

异步任务在执行的时候,会经历4个步骤:

onPreExecute:在任务开始之前,被UI线程调用。这个一般是用来设置任务,比如在用户界面显示一个进度条。

doInBackground:在onPreExecute()执行完以后,立即被后台线程执行。这一步是用来执行后台计算,这可能会执行很长时间,异步任务的参数会传递进来。

这一步运行的结果必须要返回出去,然后传递给最后一步。

onProgressUpdate:在调用了publishProgress之后被UI线程调用。执行的时间无法估计。

当后台任务在执行的过程中,这个方法用来在用户界面显示进度,比如:它可以用来显示进度条的动画或者是在文本上显示log。

onPostExecute:后台任务执行完毕以后,被UI线程调用。后台线程的执行结果会作为一个参数被传进来。

取消一个任务

在任何时候通过调用cancel(boolean)可以用来取消一个任务。调用这个方法以后,随后调用isCancelled()都会返回true。

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

人工智能实验室
相关文章相关文章
  • 韩春雨称已能重复实验结果 近期将有消息公布

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

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

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

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

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

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

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

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

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

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

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

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