Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

Программирование Android

Войти
Регистрация
Восстановить пароль
 
sausagerus
226 / 3 / 0
Регистрация: 12.07.2014
Сообщений: 51
#1

AsyncTask doInbackground и onPostExecute выполняются параллельно ? - Программирование Android

06.05.2016, 14:16. Просмотров 382. Ответов 11
Метки нет (Все метки)

Привет всем)) колдую на AsyncTask doInBackground и onPostExecute
Читал что onPostExecute выполняется всегда после doInBackground, но то ли я чего-то не допонял, то ли что-то пошло не так))) суть проблемы такова, что все операции в doInBackground выполняются после того, как сначало вызовутся все три метода asyncTask.
Есть примерно такой код
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
public class InvoicesDetails extends AppCompatActivity{
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_invoices_details);
 
        //set activity name to choosen invoice
        final String InvoiceNumberForDetails = getIntent().getStringExtra("InvoiceNumberForDetails");
        setTitle("Invoice number: "+InvoiceNumberForDetails);
        NetworkUtils utils = new NetworkUtils(InvoicesDetails.this);
 
        if (utils.isConnectingToInternet()) {
            new DataFetcherTask().execute();
            //System.out.println(handler.getAllAddresses());
        } else{
            //do what I want
        }
    }
    class DataFetcherTask extends AsyncTask<Void, Void, Void>{
 
        protected void onPreExecute(){
            super.onPreExecute();
            System.out.println("1");
        }
        @Override
        protected Void doInBackground(Void... params) {
        System.out.println("2");
        for(int i  =0; i < 100; i++){
            System.out.println("2.2");
        }
        protected void onPostExecute(Void aVoid){
            super.onPostExecute(aVoid);
            System.out.println("3");
        }
   }
}
вот что мне выдаёт консолька:
System.out.println("1");

System.out.println("2");

System.out.println("3");

то есть сначало он вызывает все методы, а затем начинает считать до 100

System.out.println("2.2");

System.out.println("2.2");

....
Вопрос выполняются действия паралельно?
Как сделать, чтобы сначало doInBackground выполнился весь, а затем onPostExecute ?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.05.2016, 14:16
Здравствуйте! Я подобрал для вас темы с ответами на вопрос AsyncTask doInbackground и onPostExecute выполняются параллельно ? (Программирование Android):

Как приостановить doInBackground() из AsyncTask - Программирование Android
Здравствуйте. Есть экземпляр AsyncTask и активити с WebView. AsyncTasd выполняет действия с сетью, передает некий url WebView....

Listener в OnPostExecute ? - Программирование Android
Дратуте! Подскажите, пожалуйста, по такой ситуации: AsyncTask парсит данные и возвращает их в onPostExecute(). В ActionBar есть кнопка. Как...

Fragment, Splash-activity, Jsoup onPostExecute - Программирование Android
Есть 2 фрагмента, собственно первый это сплеш-активити, перед запуском самого приложения: protected void onCreate(Bundle...

AsyncTask и get() - Программирование Android
Создаю асинхронный процесс, где в onPreExecute() запускаю анимированный ProgressDialog. После выполнения задачи нужно выполнить действия....

AsyncTask - Программирование Android
Привет. Знаю, что в AsyncTask doInBackground() обращатся к компонентам UI нельзя. Когда я пытаюсь обновить вывод (в EditText) в...

AsyncTask - Программирование Android
Здравствуйте, при использовании двух одинаковых методов получается разный результат. AsyncTask в одном случае успешно передает данные в...

11
Pablito
2477 / 1961 / 611
Регистрация: 12.05.2014
Сообщений: 6,866
Завершенные тесты: 1
06.05.2016, 15:21 #2
этот код вообще не рабочий
0
sausagerus
226 / 3 / 0
Регистрация: 12.07.2014
Сообщений: 51
06.05.2016, 15:34  [ТС] #3
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
public class InvoicesDetails extends AppCompatActivity{
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_invoices_details);
 
        //set activity name to choosen invoice
        final String InvoiceNumberForDetails = getIntent().getStringExtra("InvoiceNumberForDetails");
        setTitle("Invoice number: "+InvoiceNumberForDetails);
        NetworkUtils utils = new NetworkUtils(InvoicesDetails.this);
 
        if (utils.isConnectingToInternet()) {
            new DataFetcherTask().execute();
            //System.out.println(handler.getAllAddresses());
        } else{
            //do what I want
        }
    }
    class DataFetcherTask extends AsyncTask<Void, Void, Void>{
 
        protected void onPreExecute(){
            super.onPreExecute();
            System.out.println("1");
        }
        @Override
        protected Void doInBackground(Void... params) {
            System.out.println("2");
            for(int i  =0; i < 100; i++){
                System.out.println("2.2");
            }
            return null;
        }
        protected void onPostExecute(Void aVoid){
            super.onPostExecute(aVoid);
            System.out.println("3");
        }
   }
}
исправил , забыл скобочку и return null;
но вопрос не в работоспособности кода... а в том что везде написано , что doInBackground ысегда выполняется первым, а затем идёт onPostExecute... а у меня оно, как то паралельно запускается
0
Pablito
2477 / 1961 / 611
Регистрация: 12.05.2014
Сообщений: 6,866
Завершенные тесты: 1
06.05.2016, 15:35 #4
там все выполняется как надо и в нужной последовательности
0
sausagerus
226 / 3 / 0
Регистрация: 12.07.2014
Сообщений: 51
06.05.2016, 16:00  [ТС] #5
хм.... хорошо.... вывалю свой весь код ... это был пример и как не странно он работает и в правду как нужно... но вот здесь оно действует именно так , как я описал сверху
ссылка на код онлайн
0
Pablito
2477 / 1961 / 611
Регистрация: 12.05.2014
Сообщений: 6,866
Завершенные тесты: 1
06.05.2016, 16:07 #6
по этой ссылке ничего не открывает
0
sausagerus
226 / 3 / 0
Регистрация: 12.07.2014
Сообщений: 51
06.05.2016, 16:10  [ТС] #7
Упс, точно, сейчас исправную дам ссылку
https://www.dropbox.com/s/mvcwjczyxy...ails.java?dl=0
0
Pablito
2477 / 1961 / 611
Регистрация: 12.05.2014
Сообщений: 6,866
Завершенные тесты: 1
06.05.2016, 16:14 #8
в файле 1745 строк и ничего что там в асинк-таске создается и стартует несколько Thread ?
0
sausagerus
226 / 3 / 0
Регистрация: 12.07.2014
Сообщений: 51
06.05.2016, 16:16  [ТС] #9
Цитата Сообщение от Паблито Посмотреть сообщение
в файле 1745 строк и ничего что там в асинк-таске создается и стартует несколько Thread ?
я новенький в этой теме))
Чем плохо что в Асинк-е потоки?
0
Pablito
06.05.2016, 16:23
  #10

Не по теме:

все, я слился с этой темы
пусть на подобного рода вопросы отвечают вежливые люди

0
YuraAAA
1576 / 1317 / 271
Регистрация: 25.10.2009
Сообщений: 3,438
Записей в блоге: 2
07.05.2016, 20:26 #11
sausagerus, прочёл все сообщения в теме и чёт приуныл. Отвечу на первый вопрос)
Методы таски выполняются в таком и только в таком порядке: onPreExecute, doInBackground, onPostExecute.
1
sausagerus
226 / 3 / 0
Регистрация: 12.07.2014
Сообщений: 51
10.05.2016, 16:16  [ТС] #12
Спасибо, в общем убрал просто onPreExecute и onPostExecute и через БД спрашиваю, был я тут или не был, оставив тысячу потоков в doInBackground )
На досуге почитаю, где я нагрешил засунув потоки в Асюнк)))
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.05.2016, 16:16
Привет! Вот еще темы с ответами:

AsyncTask - Программирование Android
Использую AsyncTasc class MyT extends AsyncTask&lt;Void, Void, Void&gt; { @Override protected Void doInBackground(Void......

Отмена AsyncTask - Программирование Android
Привет. Есть такой код: @Override protected Void doInBackground(Void... params) { try { Interpret(Source.get()); }...

AsyncTask тормозит - Программирование Android
Подскажите пожалуйста, делалю загрузку данных с сервера через asyncTask и возвращаются результат, а дальше делаю обработку этих данных во...

Не работает AsyncTask - Программирование Android
Не работает AsyncTask , вот код: private void registerInBackground() { new AsyncTask() { @Override ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
12
Yandex
Объявления
10.05.2016, 16:16
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru