利用androidannotations的@Backgroud及@UiThread引文替换原生AsyncTask的写法
利用androidannotations的@Backgroud及@UiThread注解替换原生AsyncTask的写法
在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