AsyncTask

来源:互联网 发布:彩票php源代码 编辑:程序博客网 时间:2024/05/01 07:15

我们要进行一个较为耗时操作的时候,一般是重新开启一个Thread或者AsyncTask来实现。那么这里就有一个问题,什么时候用Thread,什么时候用AsyncTask呢?首先,我们要明白他们之间的区别?

Thread,线程,我们要知道它有两个地方需要注意:①开销大,如果你的任务多,且都单独开线程来操作的话,效率低 ②匿名线程启动后不受程序控制 ③android的UI跟新需在UI线程里面,那么Thread必须配合Handler。

AsyncTask,它的特点是主要任务在其他线程运行,但它的回调时在主线程中执行。

那么这样我们就明白了,如果你需要的只是执行一个简单的数据库或者获取网页内容操作,用AsyncTask就可以了,当然,有时候也要具体情况具体分析,这就靠积累了。

我们来看看AsyncTask的实现要点:

①onPreExecute() 当任务执行之前开始调用此方法,可以在这里显示进度对话框之类的提示。

②String doInBackground(String... params) 此方法在后台线程执行,完成任务的主要工作,通常需要较长的时间,这个期间可以调用publishProgress(int)[这个函数会调用onProgressUpdate]来跟新任务进度

③onProgressUpdate(Progress...) 此方法在主线程执行,用于显示任务执行的进度。

④onPostExecute(Result) 此方法在主线程执行,任务执行的结果作为此方法的参数返回

从上面的参数 我们可以看到AsyncTask定义了三种泛型类型 Params,Progress和Result。

* Params 启动任务执行的输入参数,比如HTTP请求的URL。//AsyncTask.execute(Params如String)传入的参数

* Progress 后台任务执行的百分比。//这个Progress 参数是publishProgress(int)设置的值
* Result 后台执行任务最终返回的结果,比如String。//这个Result参数是doInBackground函数的返回值


原创粉丝点击