转载请注明 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
使用AndroidAnnotations简化Android异步任务执行
本文展示了如何利用AndroidAnnotations的@Backgroud和@UiThread注解简化Android工程中异步任务的执行,通过替换传统的AsyncTask类实现,使得代码更加清晰、简洁。
3780

被折叠的 条评论
为什么被折叠?



