2015-09-17 2 views
0

В течение AsyncTask я называю метод, я имею в виду внутри doInBackgroud() { ...code goes here ... }, я вызываю метод, который ..Android вызова метода из другого класса изнутри AsyncTask

A) .. внутри класса задач асинхронных

B) .. в другой класс

Является ли этот метод вызова еще выполнен в резьбе AsyncTask?

Я задаюсь вопросом, потому что часто говорят, что «только код внутри doInBackgroud() { ...code goes here ... } выполняется в другом потоке.

ответ

1

Звонки сделаны (прямо или косвенно) изнутри doInBackground() автоматически запускаются в фоновом режиме.

Есть способы заставить некоторый код работать в основном потоке пользовательского интерфейса (например, см. this question), но это должно быть сделано явно.

1

Да, вызов метода выполняется в резьбе AsyncTask. AsyncTask будет бесполезен если не может вызывать методы других классов. Кроме того, если метод doInBackground (часто используется, чтобы сделать веб-запросов) будет работать в основном потоке, то Android будет сгенерировано исключение (NetworkOnMainThreadException).

1

Я задаюсь , потому что часто говорят, что «только код внутри doInBackgroud() {... код идет здесь ...} выполняется в другом потоке.

Когда приложение запущено, создается поток, называемый потоком пользовательского интерфейса (также называемый «основной» нитью). Этот поток отправляет все события виджетам и еще что-то в ваше приложение.

AsyncTask выполнит onPreExecute и onPostExecute в потоке пользовательского интерфейса. doInBackground() с другой стороны вызывается в фоновом потоке и возвращается к основному потоку после его завершения.

Смежные вопросы