android - 为什么我的第一个 Android Volley 请求需要这么长时间?(3 到 4 秒)
问题描述
我正在使用 Volley 发送简单的字符串请求以获取 JSON 数据。请求在 onCreateView 和用户单击按钮时发送。第一个请求需要很长时间(通常在 3 到 4 秒之间)。所有其他请求需要 200 毫秒到 1.5 秒,具体取决于互联网连接的速度。当我关闭应用程序并重新启动它时,第一个请求再次需要那么长时间。
知道是什么导致了这种长时间的延迟以及如何解决它吗?提前致谢。
public class MyFragment extends Fragment {
private static RequestQueue mQueue;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_my_fragment, container, false);
setHasOptionsMenu(true);
if (mQueue == null) {
mQueue = Volley.newRequestQueue(requireContext());
}
downloadData();
return view;
}
@Override
public void onCreateOptionsMenu(@NonNull Menu menu, @NonNull MenuInflater inflater) {
inflater.inflate(R.menu.menu_my_fragment, menu);
super.onCreateOptionsMenu(menu, inflater);
}
@Override
public boolean onOptionsItemSelected(@NonNull MenuItem item) {
int id = item.getItemId();
if (id == R.id.refresh) {
downloadData();
}
return super.onOptionsItemSelected(item);
}
private void downloadData() {
mQueue.cancelAll("myRequests");
StringRequest stringRequest = new StringRequest(Request.Method.GET, "https://....",
new Response.Listener<String>() {
@Override
public void onResponse(String response) {
Log.d("MyFragment", response);
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
error.printStackTrace();
}
});
stringRequest.setTag("myRequests");
mQueue.add(stringRequest);
}
.
2020-04-23 18:00:17.068 20123-20285/de.mypackage D/Volley: [9445] BasicNetwork.logSlowRequests: HTTP response for request=<[ ] https://.... 0x3b23467b NORMAL 1> [lifetime=3029], [size=106467], [rc=200], [retryCount=0]
2020-04-23 18:00:17.123 20123-20123/de.mypackage D/Volley: [2] MarkerLog.finish: (3094 ms) [ ] https://.... 0x3b23467b NORMAL 1
2020-04-23 18:00:17.123 20123-20123/de.mypackage D/Volley: [2] MarkerLog.finish: (+0 ) [ 2] add-to-queue
2020-04-23 18:00:17.124 20123-20123/de.mypackage D/Volley: [2] MarkerLog.finish: (+5 ) [9444] cache-queue-take
2020-04-23 18:00:17.124 20123-20123/de.mypackage D/Volley: [2] MarkerLog.finish: (+1 ) [9444] cache-hit-expired
2020-04-23 18:00:17.124 20123-20123/de.mypackage D/Volley: [2] MarkerLog.finish: (+1 ) [9445] network-queue-take
2020-04-23 18:00:17.124 20123-20123/de.mypackage D/Volley: [2] MarkerLog.finish: (+3034) [9445] network-http-complete
2020-04-23 18:00:17.125 20123-20123/de.mypackage D/Volley: [2] MarkerLog.finish: (+8 ) [9445] network-parse-complete
2020-04-23 18:00:17.125 20123-20123/de.mypackage D/Volley: [2] MarkerLog.finish: (+3 ) [9445] network-cache-written
2020-04-23 18:00:17.125 20123-20123/de.mypackage D/Volley: [2] MarkerLog.finish: (+0 ) [9445] post-response
2020-04-23 18:00:17.125 20123-20123/de.mypackage D/Volley: [2] MarkerLog.finish: (+42 ) [ 2] done
2020-04-23 18:00:20.613 20123-20284/de.mypackage D/Volley: [9444] WaitingRequestManager.maybeAddToWaitingRequests: new request, sending to network https://....
2020-04-23 18:00:20.792 20123-20175/de.mypackage I/mypackage: ProcessProfilingInfo new_methods=4359 is saved saved_to_disk=1 resolve_classes_delay=8000
2020-04-23 18:00:20.829 20123-20286/de.mypackage D/Volley: [9446] BasicNetwork.logSlowRequests: HTTP response for request=<[ ] https://.... 0x3b23467b NORMAL 2> [lifetime=211], [size=106467], [rc=200], [retryCount=0]
2020-04-23 18:00:20.857 20123-20123/de.mypackage D/Volley: [2] MarkerLog.finish: (249 ms) [ ] https://.... 0x3b23467b NORMAL 2
2020-04-23 18:00:20.857 20123-20123/de.mypackage D/Volley: [2] MarkerLog.finish: (+0 ) [ 2] add-to-queue
2020-04-23 18:00:20.857 20123-20123/de.mypackage D/Volley: [2] MarkerLog.finish: (+1 ) [9444] cache-queue-take
2020-04-23 18:00:20.858 20123-20123/de.mypackage D/Volley: [2] MarkerLog.finish: (+4 ) [9444] cache-hit-expired
2020-04-23 18:00:20.858 20123-20123/de.mypackage D/Volley: [2] MarkerLog.finish: (+4 ) [9446] network-queue-take
2020-04-23 18:00:20.858 20123-20123/de.mypackage D/Volley: [2] MarkerLog.finish: (+213 ) [9446] network-http-complete
2020-04-23 18:00:20.858 20123-20123/de.mypackage D/Volley: [2] MarkerLog.finish: (+4 ) [9446] network-parse-complete
2020-04-23 18:00:20.859 20123-20123/de.mypackage D/Volley: [2] MarkerLog.finish: (+2 ) [9446] network-cache-written
2020-04-23 18:00:20.859 20123-20123/de.mypackage D/Volley: [2] MarkerLog.finish: (+0 ) [9446] post-response
2020-04-23 18:00:20.859 20123-20123/de.mypackage D/Volley: [2] MarkerLog.finish: (+21 ) [ 2] done
编辑:这只发生在我家里的 WiFi 上。我还发现了其他有趣的东西。影响加载所需的DEFAULT_TIMEOUT_MS
时间。当我尝试这个时,需要 20 秒:
stringRequest.setRetryPolicy(new DefaultRetryPolicy(20000, DefaultRetryPolicy.DEFAULT_MAX_RETRIES, DefaultRetryPolicy.DEFAULT_BACKOFF_MULT));
任何想法?
解决方案
推荐阅读
- php - 为 php 和 mysql 数据更改中的表单选择值
- javascript - iOS/iPhone 输入“数字”键盘允许冒号
- java - weblogic.application.ModuleException:创建名为“licenseMapperImpl”的 bean 时出错:
- plot - 使用 NetCdf 文件绘制特定区域的气候数据
- java - Spring STS 中的内容辅助错误
- lua - 在 Lua 中,使用和不使用“local”关键字声明的本地函数有区别吗?
- css - Firefox 错误:“预期的媒体功能名称,但发现'悬停'”
- python - Deploying Python Falcon on Apache2 with mod_wsgi
- php - “服务器向客户端发送未知字符集 (255)” 将 MySQL 字符集设置为 utf8 w/o /etc/my.cnf?
- wordpress - 将字符串从 wordpress 插件传输到服务器的最佳方法是什么?