Как избавиться от зависания приложения при многопоточности?

Кратко о проблеме: получаю из ВК список подписчиков, асинхронно запускаю получение их аватарок по url. Сам список, конечно же, прогружается быстрее аватарок и помещается в RecycleView. Аватарки в это время продолжают грузиться асинхронно.

В чём суть проблемы: когда я хочу перейти в другой фрагмент, приложение зависает, пока там фоново не прогрузятся все авы. Можно ли как-то отрубить все лишние потоки? Или лучше, чтобы они подгружались, но я мог при этом гулять по фрагментам.

Немного кода для ясности:

        RecyclerView recycleViewUsersGroup = v.findViewById(R.id.recycleViewUsersGroup);

        recycleViewUsersGroup.setLayoutManager(new LinearLayoutManager(getContext(), LinearLayout.VERTICAL, false));

        arrayListIDs = new ArrayList<>();

        int[] counterLoadParticipants = {0};

        AdapterParticipants.AdapterParticipantsCallback listener = this;
        final AdapterParticipants adapterParticipants = new AdapterParticipants(getContext(), arrayListParticipants, listener);

        recycleViewUsersGroup.setAdapter(adapterParticipants);

        new Thread(){
            @Override
            public void run() {
                try {
                    synchronized (this) {
                        wait(500);

                        do {
                            new VKRequest("groups.getMembers", VKParameters.from(
                                    VKApiConst.ACCESS_TOKEN, access_token,
                                    VKApiConst.GROUP_ID, id_check,
                                    VKApiConst.SORT, "time_desc",
                                    VKApiConst.OFFSET, OFFSET,
                                    VKApiConst.FIELDS, "first_name,photo_100"))
                                    .executeSyncWithListener(new VKRequest.VKRequestListener() {
                                        @Override
                                        public void onComplete(VKResponse response) {
                                            super.onComplete(response);

                                            try {
                                                JSONObject obj = new JSONObject(response.json.toString());
                                                JSONObject jsonRootObject = new JSONObject(obj.getString("response"));
                                                JSONArray jsonArray = jsonRootObject.getJSONArray("items");

                                                count_participants = jsonRootObject.getString("count");

                                                for (int i = 0; i < jsonArray.length(); i++) {
                                                    JSONObject tmp_obj = jsonArray.getJSONObject(i);
                                                    arrayListIDs.add(jsonArray.getJSONObject(i).getString("id"));

                                                    int finalI = i;
                                                    new Thread() {
                                                        @Override
                                                        public void run() {
                                                            try {
                                                                synchronized (this) {
                                                                    try {
                                                                        System.out.println(finalI);

                                                                        Bitmap mIcon11 = BitmapFactory.decodeStream((InputStream) new URL(tmp_obj.getString("photo_100")).getContent());

                                                                        arrayListParticipants.add(new participant_item(
                                                                                mIcon11,
                                                                                tmp_obj.getString("first_name") + " " + tmp_obj.getString("last_name"),
                                                                                jsonArray.getJSONObject(finalI).getString("id")));
                                                                    }
                                                                    catch (Exception e) { e.printStackTrace(); }

                                                                    Objects.requireNonNull(getActivity()).runOnUiThread(adapterParticipants::notifyDataSetChanged);
                                                                }
                                                            }
                                                            catch (Exception e) { e.printStackTrace(); }
                                                        }
                                                    }.start();
                                                    counterLoadParticipants[0]++;
                                                }
                                            }
                                            catch (Exception e){ e.printStackTrace(); }
                                        }
                                        @Override
                                        public void onError(VKError error) {
                                            Toast.makeText(getContext(), getString(R.string.Error),
                                                    Toast.LENGTH_SHORT).show();
                                        }
                                    });
                            OFFSET += 1000;
                        } while (OFFSET < Integer.parseInt(count_participants));

                        Objects.requireNonNull(getActivity()).runOnUiThread(() -> {
                            adapterParticipants.notifyDataSetChanged();
                        });
                    }
                } catch (Exception e) { e.printStackTrace(); }
            }
        }.start();

Ответы (0 шт):