android多线程学习系列2:AsysncTask:以在子线程进行UI操作为例

自定义一个AsysncTask:

class XXX extends AsysncTask<Params,Progress,Result >{

//方法

...

}

Params:执行AsysncTask时需要传入的参数(如void)

Progress:后台任务执行时,若需要在界面上显示当前进度,则在此参数上指定泛型作为进度单位(如Integer),调用函数publishProgress传到onProgressUpdate方法中处理此数据。

Result:这里指定泛型作为返回值类型(如Boolen)onPostExecute方法接收的数据



经常需要重写的方法有以下四种

1.onPreExecute():调用AsysncTask类时执行调用,主要进行一些界面的初始化。

2.doInBackground(Params):此方法内的所有代码都在子线程中调用。完成后通过return返回结果,返回类型值由上面的Result决定。若进行UI操作,在此调用publishProgress(Progress)方法来完成。

3.onProgressUpdate(Progress):当调用了publishProgress(Progress)时,此方法会被调用,该方法的参数就是publishProgress(Progress)传入的参数,在这个方法中可以进行UI操作。不执行publishProgress则不会调用此方法。

4.onPostExecute(Result):任务完成,通过return返回的时候,调用这个方法。可以用此方法获取返回的数据来进行一些UI操作。



诀窍:doInBackground()执行具体耗时任务,onProgressUpdate()执行UI的更新,onPostExecute()进行任务的收尾。

启动任务:new XXX.execute();

你可能感兴趣的:(android多线程学习系列2:AsysncTask:以在子线程进行UI操作为例)