我应该用Asynctask Loader替换Asynctask实现



我需要从Web服务请求数据。我已经实现了以下异步箱来做到这一点:

class LoadTagsTask extends AsyncTask<Void, Void, String> {
    private String url = "http://webservice.com/rest/tagsManager/search";
    ProgressBar loader;
    @Override
    protected void onPreExecute() {
        loader = (ProgressBar) TextsListActivity.this.findViewById(R.id.textLoadingProgressBar);
        loader.setVisibility(TextView.VISIBLE);
    }
    @Override
    protected String doInBackground(Void... params) {
        HttpURLConnection c = null;
        try {
            c = (HttpURLConnection) new URL(url).openConnection();
            InputStream in = c.getInputStream();
            StringBuilder stringBuffer = new StringBuilder();
            final char[] charBuffer = new char[8 * 1024];
            BufferedReader reader = new BufferedReader(new InputStreamReader(in), charBuffer.length);
            int read;
            while ((read = reader.read(charBuffer)) != -1) {
                stringBuffer.append(charBuffer, 0, read);
            }
            reader.close();
            return stringBuffer.toString();
        } catch (Exception e) {
            return "";
        } finally {
            if (c != null) {
                c.disconnect();
            }
        }
    }
    @Override
    protected void onPostExecute(String tags) {
        loader.setVisibility(TextView.GONE);
        TextsListActivity.this.showTagsSelectorActivity(tags);
    }
}

AsyncTaskLoader替换它是有意义的吗?我读到它们可以互换使用,但是AsyncTaskLoader做得更好。在我的情况下适用吗?

我认为您应该用改造替换AsyncTask

它封装了低级逻辑,例如管理线程和http Concection。

使用Raterrofit可以使您的代码清洁器,并允许您仅专注于后端使用的数据。

改造支持:

  • 同步,异步和可观察的执行
  • 默认与gson集成
  • 请求拦截器
  • 嘲笑的好测试

最新更新