AsyncTask——异步任务
个人认为这是翻译比较好的一次。。
Class Overview//类概述
AsyncTask enables proper and easy use of the UI thread. This class allows to perform background operations and publish results on the UI thread without having to manipulate threads and/or handlers.
//异步任务用在UI线程更适当和简单,这个类允许执行一个后台运作并且发布结果到UI线程而不需要去操作线程和Handler。
An asynchronous task is defined by a computation that runs on a background thread and whose result is published on the UI thread. An asynchronous task is defined by 3 generic types, called Params
, Progress
and Result
, and 4 steps, calledonPreExecute
, doInBackground
, onProgressUpdate
and onPostExecute
.
//一个异步任务被定义在运行后台线程和结果返回值UI线程的操作里面,一个异步任务定义了3个泛型,调用传入参数、执行进度和执行结果,并调用这4步:onPreExecute
, doInBackground
, onProgressUpdate
and onPostExecute
.
AsyncTask‘s generic types//异步任务的泛型参数
The three types used by an asynchronous task are the following:
//这个三个被异步任务调用的类型如下
Params
, the type of the parameters sent to the task upon execution.//参数,这个参数将发送至执行体
Progress
, the type of the progress units published during the background computation.//进度,在后台操作期间这个参数将被不断发布出去
Result
, the type of the result of the background computation.//结果,后台运作的结果
Not all types are always used by an asynchronous task. To mark a type as unused, simply use the type Void
:
//不是所有的类型都要用在异步任务上,也可标志为不需使用,参数类型改为Void即可。
private class MyTask extends AsyncTask<Void, Void, Void> { ... }
The 4 steps//四大部
When an asynchronous task is executed, the task goes through 4 steps://当一个异步任务执行了,将会走一下
onPreExecute()
, invoked on the UI thread immediately after the task is executed. This step is normally used to setup the task, for instance by showing a progress bar in the user interface.//这个方法调用在UI线程在任务执行了就立即调用这个函数。这一步通常设置一个任务,例如可以显示一个进度条。
doInBackground(Params...)
, invoked on the background thread immediately after onPreExecute()
finishes executing. This step is used to perform background computation that can take a long time. The parameters of the asynchronous task are passed to this step. The result of the computation must be returned by this step and will be passed back to the last step. This step can also use publishProgress(Progress...)
to publish one or more units of progress. These values are published on the UI thread, in the onProgressUpdate(Progress...)
step.//这个方法在 onPreExecute()执行完毕就立即执行此方法,这步用以执行一个耗时的任务,异步任务Params的参数将传至这一步,执行的结果必须在这一步返回并回传至最后一步即
onPostExecute(Result)。在这里也可以用publishProgress()发布一个或多个进度。这些值将在onProgressUpdate(Progress...)
方法里,传送至UI线程
onProgressUpdate(Progress...)
, invoked on the UI thread after a call to publishProgress(Progress...)
. The timing of the execution is undefined. This method is used to display any form of progress in the user interface while the background computation is still executing. For instance, it can be used to animate a progress bar or show logs in a text field.//这一步要注意咯,这个方法是调用在publishProgress(Progress...)方法后,如果步调用
publishProgress()将不走一步哦。这个方法可以在UI上显示任何样式的进度当后台任务还在执行时。例如它可以被用在更新一个进度条上,或者显示文字性的日志。
onPostExecute(Result)
, invoked on the UI thread after the background computation finishes. The result of the background computation is passed to this step as a parameter.//这一部是在异步任务执行完时调用。执行的结果将以参数的形式传递至这一步。
Threading rules//线程规则
There are a few threading rules that must be followed for this class to work properly:
//这个累必须符合以下规则才能正确的执行
Memory observability//内存观察
AsyncTask guarantees that all callback calls are synchronized in such a way that the following operations are safe without explicit synchronizations.异步任务必须保证所有的回调都是线程安全的同步的。