Android的AsyncTask官方API谷歌翻译版
来源:互联网 发布:源码交易 淘宝 编辑:程序博客网 时间:2024/06/06 05:38
AsyncTask的
扩展对象类概述
AsyncTask的正确实现,易于使用的用户界面线程。 此类允许执行后台操作而无需操作线程和/或处理程序发布在UI线程上的结果。
AsyncTask的设计是围绕一个辅助类Thread
和Handler
,并不构成通用线程框架。 AsyncTasks最好应用于短操作(几秒钟之最。)如果您需要保持运行很长一段时间线程,强烈建议您使用所提供的各种API java.util.concurrent
如包Executor
, ThreadPoolExecutor
和FutureTask
。
一个异步任务由在后台线程运行的计算,其结果发表在UI线程上定义。 一个异步任务由3泛型类型定义,所谓Params
, Progress
和Result
,以及4个步骤,称为onPreExecute
,doInBackground
, onProgressUpdate
和onPostExecute
。
用法
AsyncTask的必须被继承使用。 子类将覆盖至少一个方法( doInBackground(Params...)
和最经常将覆盖第二个( onPostExecute(Result)
。)
下面是子类的实例:
私有类DownloadFilesTask扩展AsyncTask的<网址,整型,长> { 保护龙doInBackground(URL网址...){ 诠释计数= urls.length; 长totalSize = 0; 对于(INT I = 0;我<计数;我++){ totalSize + = Downloader.downloadFile(网址[I]); publishProgress((INT)((I /(浮点)数)* 100)); //早期逃生,如果取消()被调用 如果(isCancelled())破; } 返回totalSize; } 保护无效onProgressUpdate(整数...进度){ setProgressPercent(进展[0]); } 保护无效onPostExecute(长效){ 的ShowDialog(“已下载”+结果+“字节”); } }
一旦创建,一个任务执行得很干脆:
新DownloadFilesTask()执行(为url1,url2 URL3)。
AsyncTask的的泛型类型
所使用的一个异步任务的三种类型的有以下几种:
Params
,参数的类型发送到在执行任务。Progress
,背景计算期间发布的进展单元的类型。Result
,背景计算的结果的类型。
不是所有类型总是使用一个异步任务。 为了纪念一个类型为未使用,只需使用类型Void
:
私有类MyTask的扩展AsyncTask的<太虚,太虚,太虚> {...}
4个步骤
当执行一个异步任务,任务经过4个步骤:
onPreExecute()
调用UI线程上执行任务之前。 该步骤通过显示在用户界面的进度条通常用于设置任务,例如。doInBackground(Params...)
后,立即在后台线程调用onPreExecute()
完成执行。 这个步骤是用于执行背景计算,并可以花费很长时间。 异步任务的参数被传递到这一步。 该计算的结果,必须通过此步骤被返回,将被传递回的最后一步。 这一步也可以使用publishProgress(Progress...)
发布的进步一个或多个单元。 这些值公布在UI线程上,在onProgressUpdate(Progress...)
一步。onProgressUpdate(Progress...)
调用后UI线程上调用publishProgress(Progress...)
的执行的计时是不确定的。 此方法用于显示的任何形式的用户界面中的进展而背景计算仍在执行。 例如,它可用于动画在文本字段进度条或显示日志。onPostExecute(Result)
,后台计算完成后在UI线程调用。 背景计算的结果被传递给此步骤作为一个参数。
取消任务
一个任务可以在任何时候通过调用取消cancel(boolean)
。 调用此方法将导致后续调用isCancelled()
返回true。 调用此方法后, onCancelled(Object)
,而不是onPostExecute(Object)
后,将被调用doInBackground(Object[])
的回报。 为了确保任务尽快取消,您应经常检查返回值isCancelled()
定期从doInBackground(Object[])
如果可能的话(在例如一个循环。)
线程规则
有迹象表明,必须遵循这一类正常工作的几个线程规则:
- 该AsyncTask的类必须在UI线程加载。 这是由于自动完成
JELLY_BEAN
。 - 任务实例必须在UI线程上创建。
execute(Params...)
必须在UI线程调用。- 不要 call
onPreExecute()
,onPostExecute(Result)
,doInBackground(Params...)
,onProgressUpdate(Progress...)
manually. - 该任务只能执行一次(如果是第二次执行尝试一个异常将被抛出。)
内存可观测
AsyncTask的保证所有回调调用以这样的方式,下面的操作都没有明确的同步安全同步。
- 在构造函数或设置成员字段
onPreExecute()
并指他们在doInBackground(Params...)
- 坐落在成员字段
doInBackground(Params...)
并参考他们onProgressUpdate(Progress...)
和onPostExecute(Result)
。
为了执行
当第一次推出,AsyncTasks是在一个后台线程串行执行。 与开始DONUT
,这改变为线程允许多个任务并行操作的一个池。 开始与HONEYCOMB
,任务在单个线程中执行,以避免因并行执行常见的应用程序错误。
如果你真的想并行执行,你可以调用executeOnExecutor(java.util.concurrent.Executor, Object[])
与THREAD_POOL_EXECUTOR
。
总结
Executor
,在串行顺序一次执行任务之一。Executor
,可用于并行执行的任务。试图取消对此任务的执行。
execute(Object)
的一个简单的Runnable对象使用。在UI线程上运行后cancel(boolean)
被调用doInBackground(Object[])
已完成。
应用程序应该重写最好onCancelled(Object)
。
运行在UI线程上后, doInBackground(Params...)
doInBackground(Params...)
publishProgress(Progress...)
被调用。doInBackground(Params...)
到UI线程上发布更新,而后台计算仍在运行。领域
公共静态最后的遗嘱执行人 SERIAL_EXECUTOR
一个Executor
,在串行顺序一次执行任务之一。 这种序列化是全球的一个特定的过程。
公共静态最后的遗嘱执行人 THREAD_POOL_EXECUTOR
一个Executor
,可用于并行执行的任务。
公共构造函数
公共 AsyncTask的 ()
创建一个新的异步任务。 此构造方法必须在UI线程调用。
公共方法
公共最后布尔 取消 (布尔mayInterruptIfRunning)
试图取消对此任务的执行。 如果任务已经完成,已经被取消了这种尝试将会失败,或无法被取消某些其他原因。 如果成功,并取消时调用这个任务还没有开始,这个任务不应该运行。如果任务已经启动, 则 mayInterruptIfRunning参数决定是否执行此任务的线程应该以试图停止任务被中断。
调用此方法将导致onCancelled(Object)
被UI线程调用后, doInBackground(Object[])
的回报。 调用此方法保证onPostExecute(Object)
是永远不会被调用。 调用此方法后,你应该检查返回的值isCancelled()
定期从doInBackground(Object[])
以尽早完成任务。
参数
回报
- 否则返回true;如果任务不能被取消,通常是由于它已经正常完成假
公共静态无效 的execute( Runnable的可运行)
方便版本execute(Object)
的一个简单的Runnable对象使用。 见execute(Object[])
的执行顺序的更多信息。
公共最后AsyncTask的 <PARAMS,进展,结果> 执行 (参数... PARAMS)
执行指定的参数的任务。 任务返回本身(这一点),这样调用者可以保持一个参考吧。
注:此功能的时间表在队列的任务为单个后台线程或取决于平台版本的线程池。 当第一次推出,AsyncTasks是在一个后台线程串行执行。 与开始DONUT
,这改变为线程允许多个任务并行操作的一个池。 开始HONEYCOMB
,任务是回到上一个单独的线程执行,以避免因并行执行常见的应用程序错误。 如果你真的想并行执行,你可以使用executeOnExecutor(Executor, Params...)
版本,此方法的THREAD_POOL_EXECUTOR
; 然而,看到的评论有关于它的使用警告。
此方法必须在UI线程调用。
参数
回报
- AsyncTask的实例中。
抛出
getStatus()
返回无论是RUNNING
或FINISHED
。公共最后AsyncTask的 <PARAMS,进展,结果> executeOnExecutor( 遗嘱执行人 EXEC,参数... PARAMS)
执行指定的参数的任务。 任务返回本身(这一点),这样调用者可以保持一个参考吧。
这种方法通常用于THREAD_POOL_EXECUTOR
允许多个任务并行由AsyncTask的管理线程池运行,但你也可以用你自己的Executor
自定义的行为。
警告:允许多个任务,以从一个线程池并行运行一般不想要的东西,因为它们的操作的顺序没有限定。 例如,如果这些任务是用于修改任何共同的状态(如写入文件由于一个按钮点击),有修改的顺序没有保证。 如果没有细致的工作有可能在极少数情况下对数据的新版本将超过撰写的一老一,导致晦涩的数据丢失和稳定性问题。 这样的变化最好在连续执行; 为保证此项工作的系列化,无论平台版本,你可以使用此功能SERIAL_EXECUTOR
。
此方法必须在UI线程调用。
参数
THREAD_POOL_EXECUTOR
可作为松散耦合任务方便进程范围的线程池。回报
- AsyncTask的实例中。
抛出
getStatus()
返回无论是RUNNING
或FINISHED
。公众最终结果GET(长超时, 为TimeUnit单位)
如有必要,等待至多给定的时间计算完成,然后获取其结果。
参数
回报
- 计算的结果。
抛出
公众最终结果 得到 ()
如有必要,等待计算完成,然后获取其结果。
回报
- 计算的结果。
抛出
公共最后AsyncTask.Status 的getStatus()
返回此任务的当前状态。
回报
- 的当前状态。
公共最后布尔isCancelled()
返回true, 如果这个任务被取消之前,正常完成。 如果要调用cancel(boolean)
的任务,通过此方法返回的值应定期检查,从doInBackground(Object[])
以尽快结束任务。
回报
- 如果真正的任务被取消它完成前
受保护的方法
保护抽象的结果doInBackground(参数... PARAMS)
重写此方法在后台线程进行计算。 指定的参数传递给参数execute(Params...)
这个任务的调用者。 这种方法可以调用publishProgress(Progress...)
到UI线程上发布的更新。
参数
回报
- 因此,通过该任务的子类定义。
保护无效onCancelled(结果结果)
在UI线程上运行后cancel(boolean)
被调用doInBackground(Object[])
已完成。
默认实现调用onCancelled()
而忽略结果。 如果你写你自己的实现,不叫super.onCancelled(result)
。
参数
doInBackground(Object[])
可以为空保护无效onCancelled()
应用程序应该重写最好onCancelled(Object)
。 这种方法是通过默认实现调用onCancelled(Object)
。
在UI线程上运行后cancel(boolean)
被调用doInBackground(Object[])
已完成。
保护无效onPostExecute(结果结果)
运行在UI线程上后, doInBackground(Params...)
指定的结果是返回的值doInBackground(Params...)
如果任务被取消,此方法将不会被调用。
参数
doInBackground(Params...)
保护无效onPreExecute()
之前运行在UI线程doInBackground(Params...)
也可以看看
onPostExecute(Result)
doInBackground(Params...)
保护无效onProgressUpdate(进展...值)
后在UI线程上运行publishProgress(Progress...)
被调用。 指定的值传递给值publishProgress(Progress...)
参数
最终保护无效publishProgress(进展...值)
这种方法可以从调用doInBackground(Params...)
到UI线程上发布更新,而后台计算仍在运行。 每次调用此方法将触发执行onProgressUpdate(Progress...)
UI线程。onProgressUpdate(Progress...)
将不会被调用,如果该任务已经被取消。
参数
- Android的AsyncTask官方API谷歌翻译版
- 翻译AsyncTask官方文档
- api 翻译之AsyncTask
- AsyncTask官网API翻译
- Android官方多媒体API Mediacodec翻译
- 【layout】ViewStub官方api的翻译
- Android开发之创建你的第一个应用(翻译自谷歌官方,原版翻译)
- Android官方文档-AsyncTask
- Android API中IBinder接口的谷歌翻译
- Android官方多媒体API Mediacodec翻译(一)
- AsyncTask的翻译
- cheeriojs官方API(翻译)
- android自定义控件官方文档的翻译
- Android 中文 API AsyncTask
- Android API 之 AsyncTask
- 谷歌翻译API
- 谷歌翻译API
- android nfc(官方翻译)
- jQuery入门:jQuery的ready事件
- Perl命令行应用程序详解
- Trust zone之我见
- 用vs2013+velt-0.1.4进行嵌入式开发 进行海思平台 UBOOT 开发
- javascipt模拟生成form表单2种提交方式
- Android的AsyncTask官方API谷歌翻译版
- 保护vnc session (by quqi99)
- 2015062703 - 郭子仪
- 互斥对象 事件对象 关键代码段的比较
- 线性表链式存储-使用c语言实现
- 内存管理
- CodeForces 550E Brackets in Implications(构造)
- pandas教程:[5]读取csv数据
- Android中dip、dp、sp、pt和px的区别详解