美文网首页
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