Альтернатива Asynctask для тяжелой работы (добавление фрагмента в пользовательский интерфейс) - PullRequest
0 голосов
/ 10 декабря 2018

Я получаю все даты между двумя указанными датами, а затем создаю фрагменты для каждой промежуточной даты.Проблема в том, что когда я использую Asynctask и помещаю метод в doinbackground, иногда он работает, а иногда нет.

Особенно, когда я открываю Asynctask, содержащий действие из другого действия.Но при нажатии кнопки внутри действия она работает с индикатором выполнения.

public class WaitForLoad extends AsyncTask<String, Integer, String>{
    @Override
    protected void onPreExecute() {
        super.onPreExecute();
        pro_bar.setVisibility(View.VISIBLE);
    }

    @Override
    protected void onPostExecute(String s) {
        super.onPostExecute(s);
        pro_bar.setVisibility(GONE);
    }

    @Override
    protected String doInBackground(String... strings) {
        get_con_fro_sta_to_end(dat_ran_sta, dat_ran_end);
        return null;
    }
}

Таким образом, согласно документации Asynctask, это должно быть 3 сек.Но если я добавлю в метод целый год, это займет около 8 секунд для загрузки или около того.

Так есть ли какое-нибудь решение Asynctask или Можете ли вы предложить мне пример альтернативы, например, с использованием обработчика или около того?

1 Ответ

0 голосов
/ 10 декабря 2018

Я думаю, что вы меняете интерфейс с вашего метода " get_con_fro_sta_to_end () " ... Это не разрешено в фоновом потоке, а затем его нужно как-то изменить.

AsyncTasksиметь " void onProgressUpdate () ", который используется для выполнения кода в UiThread / MainThread каждый раз, когда " publishProgress () " вызывается из " doInBackground ()".

DoInBackground () НЕ ДОЛЖЕН касаться Интерфейса, а просто подготавливает Данные / Вещи для отображения с использованием" onPostExecute ()"(который запускает код в UiThread / MainThread)

...