(一)为了解决新线程不能跟新UI组件的问题,Android提供了如下几种解决方案:
(1)使用Hanlder实现线程之间的通信。
(2)Activivy.runOnUiThread(Runnable)。
(3)View.post(Runnable)。
(4)View.postDelayed(Runnable,long)。
Hanlder还要轻量级一些的AsyncTask(异步任务),适用于简单的异步处理,不需要借助线程和Hanlder即可实现,AsyncTask的特点是任务在主线程之外执行,而回调方法是在主线程中执行,有效的避免了使用Hanlder的麻烦,AsyncTask的设计很好的解决了匿名线程的问题。
AsyncTask<Params,Progress,Result>是一个抽象类,通常用于被继承,这三个参数分别有他各自的含义:
Params :启动任务执行的输入参数的类型。
Progress:后台任务完成的进度值的类型。
Result:后台执行任务完成后返回结果的类型。
(二)使用AsyncTask只需三步即可:
(1)创建AsyncTask的子类,并为三个泛型参数指定类型。如果某个泛型参数不需要指定类型,则可将它指定为Void。
(2)根据你的需要,实现AsyncTask的如下方法:
dolnBackground(Params...):重写该方法就是后台线程将要完成的任务。该方法可以调用publish Progress(Progress...values)方法跟新任务的执行进度。
onProgressUpdate(Progress...values):在dolnBackground()方法中调用publish Progress()方法跟新任务的执行进度后,将会触发该方法。
onPostExecute():该方法将会在执行后台耗时操作前被调用。通常该方法用于完成一些初始化的准备工作,比如在界面上显示进度条等。
onPostExecute(Result...result):这个方法是不是和上面的有些类似,其实两种方法具有很大的区别,dolnBackground()完成后,系统自动调用上面那个方法,也就是onPostExecute()方法,并将dolnBackground()方法的返回值传给该方法用于完成。
(3)调用AsyncTask子类的实例的execute(Params...params)开始执行耗时任务。
(三)使用AsyncTask时必须遵守如下规则。
(1)必须在UI线程中创建AsyncTask的实例。
(2)必须在UI线程中调用AsyncTask的execute()方法。
(3)AsyncTask的以上方法,不应该由程序员代码调用,而是由Android系统负责调用。
(4)每个AsyncTask只能被执行一次,多次调用将会引发异常。
以上是本人通过学习AsyncTask(异步任务)所了解的知识,希望对你有很大的帮助,下篇会写一个Demo来彻底的让你了解AsyncTask中方法的含义。