0

我已经成功实现了网络请求处理的 Volley。但是,当我的应用程序启动时,它会熄灭并获取它需要的配置文件。我想知道 Volley 是否是获取这个非常早期的初始配置数据的正确选择?为队列、缓存等实例化 volley 线程是否需要一些时间,所以对于这个初始请求,它可能是错误的选择?我想就此获得一些反馈。一方面,它是一个不错的选择,因为它的 RetryPolicy 设置会尝试多次填充请求,另一方面,设置 volley 请求队列和运行 volley 线程可能需要一些时间?我最好只使用 AsyncTask 发出这个初始请求吗?

4

3 回答 3

1

既然是first请求,我更愿意使用AsyncTask,Volley 确实非常好,但这是应用程序刚开始时的一个重要过程,也许那个时候 Volley 还ready没有或将要some additional meaningful time执行请求,所以AsyncTask它是更适合这种特殊情况,而且您将完全控制如何first完成此请求。

编辑:我刚刚看到了 Ficus Kirkpatrick(Volley 库的主脑),他说你可以RequestQueue按需创建或者先创建,然后在其余代码中保持它像 Singleton 一样,所以听到这个,你应该尝试一下AsyncTask 和 Volley 并检查性能方面的结果,我仍然认为更简单的 AsyncTask 会比立即使用 Volley 做得更好,他还说当然 Volley 不是必须的,所以我想这是其中之一不是必须的情况。

于 2013-08-10T00:28:52.593 回答
1

如果您发现 Volley 的功能有用或希望与您在应用程序的其余部分中执行网络请求的方式保持一致,请使用 Volley。

Volley 设置运行所需的时间并不重要。获取配置文件所需的往返时间为 100 毫秒。而设置 Volley 最多需要 10 毫秒。

于 2013-08-10T07:16:22.833 回答
0

如果您想使用AsyncTask基础设施,但又想轻松创建Volley请求,请考虑使用droidQuery,它遵循与请求相同的模式Javascript。例如,JSON要从获取example.com,您可以使用速记方法:

$.getJSON("http://www.example.com", null, new Function() {
    @Override
    public void invoke($ droidQuery, Object... params) {
        JSONObject json = (JSONObject) params[0];
        //TODO handle json
    }
});

或速记方法:

$.ajax(new AjaxOptions().url("http://www.example.com")
                        .type("GET")
                        .dataType("json")
                        .success(new Function() {
                            @Override
                            public void invoke($ droidQuery, Object... params) {
                                JSONObject json = (JSONObject) params[0];
                                //TODO handle json
                            }
                         })
                         .error(new Function() {
                            @Override
                            public void invoke($ droidQuery, Object... params) {
                                AjaxError e = (AjaxError) params[0];
                                Log.e("$", "Error " + e.status + ": " + e.error);
                            }
                         }));
于 2013-08-14T15:17:28.220 回答