Комната Вложенная AsyncTask? - PullRequest
       15

Комната Вложенная AsyncTask?

0 голосов
/ 21 сентября 2018

Итак, я использовал механизм сохранения комнат для моего приложения Android, и вот мой код для обновления базы данных после сбора некоторых данных из пользовательского ввода:

new AsyncTask<Product,Void,Void>() {
        @Override
        protected Void doInBackground( Product ... newProducts ) {
            Producer q= new Producer();
            q.setName(nm);
            MyDatabase.getDatabase(getActivity()).myDao().insertProducers(q);
            int id= MyDatabase.getDatabase(getActivity()).myDao().getProducerByName(nm).getId();
            Product p= newProducts[0];
            p.setProducerId(id);
            MyDatabase.getDatabase(getActivity()).myDao().insertProducts(p);
            id= MyDatabase.getDatabase(getActivity()).myDao().getProductByUpc(p.getUpcCode())[0].getId();
            for ( Packaging x: packagings )
                x.setProductId(id);
            Packaging[] array= new Packaging[packagings.size()];
            for ( int i= 0; i < packagings.size(); ++i )
                array[i]= packagings.get(i);
            MyDatabase.getDatabase(getActivity()).myDao().insertPackagings(array);
            return null;
        }
    }.execute(p);

Так как я где-то читалчто @Dao выполняет некоторые запросы в другом потоке по умолчанию, теперь я вижу, что приведенный выше код нельзя доверять для последовательного выполнения.Я отказался от действий в onPreExecute() и onPostExecute(), так как по документации они выполняются в потоке пользовательского интерфейса.Итак, ответ на мой вопрос - использовать вложенные AsyncTask s?Это хорошая практика, или она соответствует тому, что я пытаюсь выполнить в приведенном выше коде?

...