Почему мой первый запрос Android Volley занимает так много времени? (От 3 до 4 секунд) - PullRequest
0 голосов
/ 23 апреля 2020

Я посылаю простые строковые запросы с помощью Volley для получения JSON данных. Запросы отправляются в onCreateView и когда пользователь нажимает кнопку. Первый запрос занимает очень много времени (обычно от 3 до 4 секунд). Все остальные запросы занимают от 200 мс до 1,5 секунд, в зависимости от того, насколько быстро соединение inte rnet. Когда я закрываю приложение и запускаю его снова, первый запрос снова занимает столько времени.

Есть идеи, что вызывает такую ​​длительную задержку и как я могу ее исправить? Заранее спасибо.

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));

Есть идеи?

1 Ответ

0 голосов
/ 08 мая 2020

Ну, это определенно зависит от того, на какой сервер вы отправляете свои запросы. Или некоторые проблемы с сетью. В любом случае - вы ничего не можете с этим поделать.

Единственное, что вы можете сделать, это не использовать залп. Вместо этого используйте Retrofit - он более зрелый, гораздо проще в обслуживании и имеет почти не требующую обучения кривую.

Это в значительной степени отраслевой стандарт на данный момент.

Но самая большая привилегия - это огромное сообщество с множеством готовых ответов на общие проблемы.

...