Может ли AsyncTask выполняться из фонового потока? - PullRequest
0 голосов
/ 30 апреля 2018

Читая документацию, я обнаружил, что класс AsyncTask должен быть загружен в поток пользовательского интерфейса . Но я удивлен, что AsyncTask также может быть выполнен из рабочего потока.

Так что вопрос:

  1. Если AsyncTask также может выполняться из фонового потока, почему в документации они говорят прямо напротив него.

  2. Как можно иметь контекст на onPostExecute.?

    new Thread(new Runnable() {
        @Override
        public void run() {
            new AsyncTask<Void, Void, Void>() {
                @Override
                protected Void doInBackground(Void... voids) {
                    return null;
                }
    
                @Override
                protected void onPostExecute(Void aVoid) {
                    super.onPostExecute(aVoid);
                    Toast.makeText(getBaseContext(), "in AsyncTask...", Toast.LENGTH_SHORT).show();
                }
            }.execute();
        }
    }).start();
    

Ответы [ 2 ]

0 голосов
/ 30 апреля 2018

Существует две нити: основная нить и рабочая нить. Asyntasck работает в рабочем потоке. Обычно Asynctask используется для фоновой задачи. Он работает в рабочем потоке и публикует результат в основном потоке.

Если блокировка основного потока на 5 или более секунд, кроме этого, появляется диалоговое окно «Приложение не отвечает» (ANR), чтобы избежать этого сценария для фоновой задачи, используемой Asynctask

0 голосов
/ 30 апреля 2018

Класс Android AsyncTask позволяет нам связывать фоновые задачи с потоком пользовательского интерфейса. Таким образом, используя этот класс, вы можете выполнять фоновые операции, а затем публиковать результаты в потоке пользовательского интерфейса, который обновляет компоненты пользовательского интерфейса.

Вы можете кратко понять выполнение AsyncTask: http://codetheory.in/android-asynctask/

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