【转】 Pro Android学习笔记(九二):AsyncTask(1):AsyncTask类

文章转载只能用于非商业性质,且不能带有虚拟货币、积分、注册等附加条件。转载须注明出处:http://blog.csdn.net/flowingflying/

在Handler的学习系列中,学习了如何handler实现worker线程与主线程(UI线程)之间的通信。这是一种通用的处理方式,因此Android SDK将handler和线程隐藏,抽象出来形成AsyncTask抽象类,方便开发者使用。之前有过一篇很好的博文:Android学习笔记(三二):线程:后台异步任务AsyncTask,详细介绍了AsyncTask的使用方式。

AsyncTask类的参数类型

下面列出AsyncTask类的几个重要方法。AsyncTask的这种参数传递方式,让我想起以前的C编程或者命令行,我们不确定function中带多少个参数,同样也不确定命令会输入多少个参数,可能没有,也可能很多。AsyncTask就采用这种generics方式,实现任意参数数量。

我们将参数类型Params用红色标出。如果我们Params的数据类型是String,那么String… params就是说可以带任意个String对象。Java将之视为数组,长度为params.length,数值通过params[i]来读取。例如对象task.execute("Hello","world","Good morning");,就是带有三个String参数,而task.execute("1","2","3","4","5","6","7");带有七个String的参数,其中params[4]是"5"。

如果Params,Progress,Result的数据类型分别是String array,Integer array和int,则继承了为MyTask<String,Integer,Integer>。如果我们确定不传递任何参数,可以用Void,例如private class MyTask extends AsyncTask<Void, Void, Void> { ... }

public class AsyncTask<Params,Progress, Result>

    //A client will call this method 
    AsyncTask<ParamsProgress, Result> 
    execute(Params.... params);
    //Do your work here 
    //Frequently trigger onProgressUpdate() 
    Result doInBackGround(Params... params);
    //Callback: After the work is complete 
    void onPostExecute(Result result); 
    //Callback: As the work is progressing 
    void onProgressUpdate(Progress.... progressValues);
}

下面通过小例子实现来进行详细介绍。

相关链接: 我的Android开发相关文章

上一篇:【转】Pro Android学习笔记(九八):BroadcastReceiver(2):接收器触发通知


下一篇:【转】 Pro Android学习笔记(九三):AsyncTask(2):小例子