AsyncTask允许你在后台线程上运行任务,同时将结果发到UI线程
UI线程有一个消息队列和允许你发送和处理来自其他线程的可运行对象和消息的处理程序
AsyncTask用了一个相当简单的接口来封装这个行为。
AsyncTask是一个泛型类
他有三个参数
- Params 执行时发送给任务的参数类型
- Progress 发布的使用后台计算来更新进度的类型
- Result 后台计算结果类型
这三个参数分别对应了AsyncTask的三个函数 - doInBackground
- onProgressUpdate
- onPostExcute
- onPreExcute
整个流程是:
首先调用Execute并将参数设置为后台任务,然后AsyncTask会运行几个步骤
首先它在UI线程上调用onPreExecute,这样你可以在背景任务开始前初始化你想在UI线程中启动的任何东西,然后它在另一个线程上调用doInBackground,你的长时间运行任务将在此运行。这是唯一必须覆盖才能使用该类的方法。并且它使用你传递给Execute函数的参数调用。如果你想要长时间任务的进度来更新一些UI,则使用进度参数调用publishProgress,这会使你的进度参数在UI线程上调用onProgressUpdate,你可以从doInBackground多次调用publishProgress,最终当doInBackGround线程上运行的任务完成时,你返回结果,这会使用返回的结果在UI线程上调用onPostExecute函数
AsyncTask是在Android上的线程之间进行线程和消息传递的有用抽象类。