Android中的AsyncTask
Android中必须在主线程处理UI,否则会引起一些意想不到的问题。然而有些任务必须处理UI而且耗时长,有可能阻塞主线程。AsyncTask是异步线程,可以方便处理这类和UI线程相关的任务。一个AsyncTask有3个泛型参数Params, Progress and Result和4个步骤begin, doInBackground, processProgress and end。AsyncTask经常用于解决Android UI堵塞问题。要使用AsyncTask必须继承它并实现它的doInBackground函数,通常还实现onPostExecute(Result)函数。同时AsyncTask必须在主线程(即UI线程)中被调用。
下面是官方说明文档的一个例子:
三个泛型参数(在定义一个AsyncTask时指定):
1.Params,当执行时,发送给任务的参数
2.Progress,在后台计算期间,计算进度的类型
3.Result,后台计算返回的结果类型
四个步骤:
1. onPreExecute() 执行execute前被调用,可以在此为后台处理做一些相应的准备工作,它运行于UI线程
2.doInBackground(Params...),后台进程执行的具体计算在这里实现,调用execute后,并且执行完onPreExecute后被调用,必须重载这个方法。在这个方法内在后台运行,和主线程独立。
3.onProgressUpdate(Progress...),运行于UI线程。可以在在doInBackground(Params...)中使用以改变UI。
4.onPostExecute(Result),运行于UI线程,参数就是doInBackground(Params...)的返回值。此方法也要经常重载。
以下是使用它时的注意事项:
1.它的任务示例必须在主线程中创建
2.Execute函数必须在主线程中调用
3.不要人为地调用onPreExecute(), onPostExecute(Result), doInBackground(Params...), onProgressUpdate(Progress...)
4.每个任务只能调用一次execute函数
一些常用的例子是使用AsyncTask访问数据库和从网络下载图片。