转载请注明 http://xuantan.iteye.com/admin/blogs/1826350
在android工程中,若想异步执行一个任务,可以继承AsyncTask<Param, Progress, Result> 类,并实现其中的回调方法即可。
如今,利用androidannotations的@Backgroud及@UiThread注解我们可以更轻松的做到这一点。
修改前代码如下:
....
@Override
public void onStart() {
super.onStart();
new DownloadUsersTask().execute();
}
private class DownloadUsersTask extends AsyncTask<Void, Void, List<User>> {
@Override
protected void onPreExecute() {
showLoadingProgressDialog();
}
@Override
protected List<User> doInBackground(Void... params) {
try{
ResponseEntity<User[]> responseEntity = restApiService.getUsersByStatus();
return Arrays.asList(responseEntity.getBody());
} catch (Exception e) {
Log.e(TAG,e.getMessage(),e);
}
return null;
}
@Override
protected void onPostExecute(List<User> result) {
dismissProgressDialog();
refreshResult(result);
}
}
private void refreshResult(List<User> users) {
if(users == null) {
return;
}
UserListAdapter adapter = new UserListAdapter(this,users);
setListAdapter(adapter);
}
...
替换后代码如下:
...
@Override
public void onStart() {
super.onStart();
showLoadingProgressDialog();
downloadUsersTask();
}
@Background
void downloadUsersTask() {
ResponseEntity<User[]> responseEntity = restApiService.getUsersByStatus();
List<User> users = Arrays.asList(responseEntity.getBody());
testTismissProgressDialog(users);
}
@UiThread
void testTismissProgressDialog(List<User> users) {
dismissProgressDialog();
refreshResult(users);
}
private void refreshResult(List<User> users) {
if(users == null) {
return;
}
UserListAdapter adapter = new UserListAdapter(this,users);
setListAdapter(adapter);
}
...
是不是清晰、简洁了很多~
相关参考:
https://github.com/excilys/androidannotations/wiki/WorkingWithThreads