Модернизация не выполняется в фоновом потоке - PullRequest
0 голосов
/ 05 мая 2020


    class RecoverObjectsBInObjectAThread extends Thread {
        int id;//ID is for logs printing.
        ObjectA objectA;

        RecoverObjectsBInObjectAThread(int id, ObjectA objectA) {
            this.id = id;
            this.objectA= objectA;
        }

        @Override
        public void run() {
            recoverObjectsBInObjectA(objectA, id);
        }
    }

   private void recoverObjectsBInObjectsA() {
        int id = 0;

        List<RecoverObjectsBInObjectAThread> threadList= new ArrayList<>();

        for (ObjectA objectA: model.getObjectsA()) {
            threadList.add(new RecoverObjectsBInObjectAThread(id, objectA));
            id++;
        }

        for (RecoverObjectsBInObjectAThread thread: threadList)
            thread.start();

        for (RecoverObjectsBInObjectAThread thread : threadList) {
            try {
                thread.join();
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }

        System.out.println("Out of for.");//Comentarios internos a borrar.

        // DO STUFF WITH ALL THE OBJECTS B
    }


 private void recoverObjectsBInObjectA(ObjectA objectA, final int id) {

        Call<ResponseRecoverObjectsB> call;
        call = modeloHome.recoverObjectsBinObjectACall(objectA.getId());

        //LOG SAYING WHAT THREAD HAS ARRIVED 1
        call.enqueue(new Callback<ResponseRecoverObjectsB>() {

            @Override
            public void onResponse(@NotNull Call<ResponseRecoverObjectsB> call, @NotNull retrofit2.Response<ResponseRecoverObjectsB> response) {
                ResponseRecoverObjectsB objectsBrecovered = response.body();
                //LOG SAYING WHAT THREAD HAS ARRIVED 2

                //STRORE OBJECT B IN MODEL AND DO STUFF

            }

            //Si hay error al recibir la respuesta
            @Override
            public void onFailure(@NotNull Call<ResponseRecoverObjectsB> call, @NotNull Throwable t) {
                //LOG SAYING WHAT THREAD HAS ARRIVED 3
                //DO ERROR STUFF
            }
        });
    }

Когда этот код выполняется, все потоки поступают в первый журнал, и ни один поток не поступает во второй или третий поток, и выдает мне такую ​​ошибку:

W/zygote: Got a deoptimization request on un-deoptimizable method void libcore.io.Linux.connect(java.io.FileDescriptor, java.net.InetAddress, int)

Вызов модернизации работает нормально в основном потоке. Я попытался выполнить вызов с помощью функции выполнения модификации (функция synchronus), и она работает, но я не знаю, лучший ли это способ сделать то, что я хочу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...