美文网首页
android 的api文档学习翻译线程AsyncTask

android 的api文档学习翻译线程AsyncTask

作者: supory | 来源:发表于2016-07-19 15:27 被阅读51次

 一、继承自java.lang.Object,包名android.os.AsyncTask<Params,Progress,Result>

二、public abstract class AsyncTask<Params,Progress,Result> extends Object

AsyncTask可以适当和简单的调用UI线程。这个类可以在后台执行,输出结果到UI线程而不用操作线程或者handler类

定义一个异步线程,运行于后台线程且结果输出到UI线程。定义一个异步线程需要三个通用的类型,Params,Progress和Result,四个步骤,beigin ,doInBackground,processProgress 和end.

三、使用Usage

AsyncTask必须通过继承来使用。子类至少要重写一个方法(doInBackground(...)),但是大多数情况下还需要重写第二个方法(onPostExecute(Result))

下面是一个实例子类

private class DownloadFilesTask extends AsyncTask<URL,Interger,Long>{

 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));

}

return totalSize;

}

protected void onProgressUpdate(Integer...progress){

setProgressPercent(progress[0]);

}

protected void onPostExecute(Long result){

showDialog("Download"+result+"bytes");

}

}

一旦创建好,一个线程类执行非常简单;

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

四、AsyncTask的通用参数

异步线程使用的三个通用参数如下:

1、Params,在执行程序时,发送给线程的参数类型

2、Progress,在后台程序执行期间输出的进度条控件

3、Result,后台程序的输出结果。

不是所有的参数都会被异步线程使用。对于不适用的参数,使用Void。

private class MyTask extends AsyncTask

五、The 4steps 四个步骤

当一个异步线程被执行,程序要经过四个步骤

1、onPreExecute(),在线程执行后立即调用UI线程。这步通常用来创建程序,例如在窗口创建一个进度条。

2、doInBackground(Params...)在方法onPreExecute()执行完后立即在后台线程调用。这步通常用来后台程序的执行,可能需要花费一定的时间。异步线程参数在此时被传递。运算的结果在该步骤被返回,在最后的步骤中被传递回去。该步骤页可以使用publishProgress(Progress...)展示一个或者多个进度条。这些值被出书在UI线程,在onProgressUpdate(Progress..)方法中

3、onProgressUpdate(Porgress...),在publishPorgress(Progress..)被调用后立即在UI线程调用。执行时间没有定义。在后台程序计算的过程中,这个方法可以展示在界面上的任何类型的进度条。例如,可以用来展示进度条动画和在文本框展示日志。

4、onPostExecute(Result),在后台程序执行完后,立即被UI线程调用。后台的计算结果此时作为参数被传递。

六、线程规则Threading rules

为了让你的泪更好的工作你的泪必须遵循下列的线程规则:

.异步线程实例必须在UI线程创建

.execute(Params..)必须在UI线程被调用

.不要手动调用onPreExecute(),onPostExecute(Result),doInBackground(Params...),onPorgressUpdate(Progress...)

.线程只能被执行一次

七、嵌套类AsyncTask.Status:记录线程的当前数据状态

八、构造方法AsyncTask()

九、方法摘要

cancle(boolean mayInterruptIfRuning):取消该任务的执行

execute(Params...params):指定参数并执行程序

get():等待,如果需要计算完成,然后检索其结果

get(long timeout, TimeUnit unit):最多等待到给定的时间,如果需要计算完成,然后检索其结果。

getStatus():得到当前任务的状态数据

isCancelled():如果在任务结束前被取消则返回真

相关文章

网友评论

      本文标题:android 的api文档学习翻译线程AsyncTask

      本文链接:https://www.haomeiwen.com/subject/lubmjttx.html