这篇文章能让你简单的了解AsyncTask的异步原理
Android从1.5版本引入AsyncTask类
AsyncTask可以灵活方便的从子线程切换到UI线程。
AsyncTask是一个抽象类,想要使用它就必须创建一个类去继承它。
1.在执行AsyncTask的时候我们需要传入三个泛型参数。
1.Params()
在执行AsyncTask的时候用于在后台任务中使用(这个是耗时操作所需要的参数)。
2.Progress()
在执行AsyncTask的时候如果需要在界面上显示当前的进度,就使用这个泛型参数做为进度类型。
3.Resule()
在任务执行完毕后如果需要返回结果,就使用这个泛型参数去做返回值类型。
2.实现AsyncTask我们会重写AsyncTask的四个方法。
1.onPreExecute()
这个方法会在后台任务开始执行之间调用,用于进行一些界面上的初始化操作,比如显示一个进度条对话框等。
2.doInBackground()
这个方法中的代码都会在子线程中运行,我们应该在这里去处理所有的耗时任务,
任务一旦完成就可以通过return语句来将任务的执行结果进行返回。
注:在這个方法中是不可以进行UI操作,想要更行UI可以调用publishProgress()方法来完成。
3.onProgressUpdate()
当在后台任务中调用了publishProgress()方法后,这个方法就很快会被调用,方法中携带的参数就是在后台
任务中传递过来的,在这个方法中可以对UI进行操作,利用参数中的数值就可以对界面元素进行相应的更新。
4.onPostExecute()
当后台任务执行完毕并通过return语句进行返回时,这个方法就很快会被调用,
返回的数据就会作为参数传递到此方法中,可以利用返回的数据进行一些UI的操作,比如提醒任务执行的结果
以及关闭掉进度条对话框等。
使用AsyncTask我们并不需要去考虑异步消息处理机制,也不需要专门使用一个Handler来发送和接收消息,
只需要调用publishProgress()方法就可以轻松的从子线程切换到UI线程了。
相信看到这里你已经对AsyncTask已经有了一个很大的了解了