在使用的时候,有几点需要格外注意:
1.异步任务的实例必须在UI线程中创建。
2.execute(Params... params)方法必须在UI线程中调用。
3.不要手动调用onPreExecute(),doInBackground(Params... params),onProgressUpdate(Progress... values),onPostExecute(Result result)这几个方法。
4.不能在doInBackground(Params... params)中更改UI组件的信息。
5.一个任务实例只能执行一次,如果执行第二次将会抛出异常。
示例:
MyTask myTask = new MyTask();
//开始一个任务(注意:一个对象只能调用一次)
myTask.execute("woshiku");
//取消一个正在执行的任务,onCancelled方法将会被调用
mTask.cancel(true);
/* <String, Integer, String>第一个参数String接受用户输入的参数如"woshiku" 用于doInBackground(String... params)第二个参数Integer用于onProgressUpdate(Integer... progresses)第三个参数String用于返回结果onPostExecute(String result)可以打印一下LOG然后对比一下
*/
class MyTask extends AsyncTask<String, Integer, String>{
//onPreExecute方法用于在执行后台任务前做一些UI操作
@Override
protected void onPreExecute() {
Log.i(TAG, "onPreExecute() called");
}
//doInBackground方法内部执行后台任务,不可在此方法内修改UI
@Override
protected String doInBackground(String... params) {
//打印出woshiku
Log.i(TAG, "doInBackground(Params... params) called"+params[0]);
for(int i=0;i<10;i++){
//调用onProgressUpdate(Integer... progresses)
publishProgress(i);
}
return null;
}
//onProgressUpdate方法用于更新进度信息
@Override
protected void onProgressUpdate(Integer... progresses) {
Log.i(TAG, "onProgressUpdate(Progress... progresses) called"+progresses[0]);
}
//onPostExecute方法用于在执行完后台任务后更新UI,显示结果
@Override
protected void onPostExecute(String result) {
Log.i(TAG, "onPostExecute(Result result) called"+result);
}
//onCancelled方法用于在取消执行中的任务时更改UI
@Override
protected void onCancelled() {
Log.i(TAG, "onCancelled() called");
}
} |