AsyncTask не работает должным образом - PullRequest
0 голосов
/ 24 мая 2018

Вот моя проблема.Я заметил, что мой AsyncTask не работает должным образом.Я имею в виду, что даже если я запускаю этот код:

@Override
protected void onProgressUpdate(Integer... values) {
    super.onProgressUpdate(values);
    progress.setText(values[0] + "%");
}

@Override
protected Void doInBackground(Void... voids) {
    for (i = 0; i <= 100; ++i) {
        publishProgress(i);

        try {
            Thread.sleep(10);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        Log.i("progress", i + "");

    }
    return null;
}

он, похоже, ничего не делает, и через 5 секунд (или даже больше) мой прогресс почти мгновенно падает с 0 до 100%,хотя он должен ждать 10 мс между каждым вызовом publishProgress ().Это то, чего мне не хватает?

Ответы [ 2 ]

0 голосов
/ 24 мая 2018

Вы звонили Thread.sleep(10); в течение 10 мс, что вызывает 100 * 10 = 100 мс (1 секунда).Это завершит весь прогресс.Это приводит к полному прогрессу за очень короткое время.

Вы можете увеличить Thread.sleep(1000) Если вы хотите четко видеть прогресс или вы можете распечатать журнал для System.currentTimeInMillis () в onProgressUpdate, чтобы увидеть прогресс.

Убедитесь, что вы вызвали asyncTask.execute () для запуска AsyncTask.

0 голосов
/ 24 мая 2018

То, что я считаю проблемой потока, потому что AsyncTask автоматически создает новый поток для вас, поэтому все, что вы делаете в doInBackground (), находится в другом потоке.Так что начните «спать» onPreExecute () и закончите onPostExecute ()

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