为什么我的第一个Android Volley请求需要那么多时间? (3至4秒)

问题描述 投票:0回答:1

我正在通过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));

任何想法?

android android-volley
1个回答
0
投票

嗯,这绝对取决于您向其发送请求的后端。或某些网络问题。无论哪种方式-您都无能为力。

您唯一可以做的就是不要使用Volley。改用Retrofit-它更成熟,更易于维护并且接近非学习曲线。

到目前为止,这几乎是行业标准。

但是最大的好处是庞大的社区,对常见问题有很多现成的答案。

© www.soinside.com 2019 - 2024. All rights reserved.