Форум программистов, компьютерный форум, киберфорум
Наши страницы
Программирование Android
Войти
Регистрация
Восстановить пароль
 
Stylish2013
7 / 7 / 1
Регистрация: 20.04.2013
Сообщений: 666
#1

Завершения потока - Программирование Android

26.05.2013, 23:20. Просмотров 963. Ответов 14
Метки нет (Все метки)

Можно как-нить запустить новый поток, только после того как завершится первый???
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.05.2013, 23:20
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Завершения потока (Программирование Android):

Ожидание завершения AsyncTask
Имеется класс "расширяющий" AsyncTask. Как я понимаю при создании объекта этого...

Ожидание завершения пула потоков
Нужно чтоб результат этого кода возвращался по завершению выполнения всех...

Как дождаться завершения RequestTask?
при создании активити в new RequestTask().execute делаю веб запрос, по...

Круг для завершения активности
Здравствуйте! Хочу спросить как можно добиться вот такого результата: Имеется...

AsyncTask не выполняет код после завершения
При окончании работы doInBackground не вызывается onPostExecute класс...

Почему после завершения работы приложение активно?
Установил программу на телефон. Протестил, делаю выход:finish();...

14
V0v1k
1160 / 984 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
26.05.2013, 23:25 #2
просто в конце кода потока и запускать...
или опишите проблему подробнее.
0
Stylish2013
7 / 7 / 1
Регистрация: 20.04.2013
Сообщений: 666
26.05.2013, 23:34  [ТС] #3
У меня в одном класс запускается поток, а в другом классе к нему подключается другой, но мне нужно чтобы второй поток запустился только после того как первый поток получит нужные данные. Иначе второму потоку не с чем работать.
0
V0v1k
1160 / 984 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
26.05.2013, 23:53 #4
Цитата Сообщение от Stylish2013 Посмотреть сообщение
У меня в одном класс запускается поток, а в другом классе к нему подключается другой
поподробнее...

Добавлено через 1 минуту
если нужна синхронизация между двумя потоками используйте join()/wait().
0
Stylish2013
7 / 7 / 1
Регистрация: 20.04.2013
Сообщений: 666
27.05.2013, 00:08  [ТС] #5
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
    public void login() {
 
            // Общение с сервером в отдельном потоке чтобы не блокировать UI поток
            new Thread() {
                @Override
                public void run() {
 
       //здесь важный код который получает от сервера данные
 
                          JSONObject jsoDB = jParserAUMeVolution
                    .getJSONFromUrl(urlMe);
                            
                String api_token = jsoDB .getString("api_token");
                    
                accountMePreferences.api_token = api_token;
 
                accountMePreferences.save(MainActivity.this);
 
    }
    }.start();
и пока вот эти строчки кода не выполняться другому потоку нельзя работать.
Java
1
2
3
4
5
                                String api_token = jsoDB .getString("api_token");
                    
                accountMePreferences.api_token = api_token;
 
                accountMePreferences.save(MainActivity.this);

но другой поток сам запускается в другом классе (фрагменте). Но ему нет смысла работать пока не будут выполнены строчки выше, так как он использует эти данные.

В другом классе поток запускается по аналогии. Но мне нужно его не запускать пока данные не будут получены первым потоком.
0
V0v1k
1160 / 984 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
27.05.2013, 00:11 #6
а в чем проблема запускать его после этих строчек?
0
Stylish2013
7 / 7 / 1
Регистрация: 20.04.2013
Сообщений: 666
27.05.2013, 00:13  [ТС] #7
Цитата Сообщение от V0v1k Посмотреть сообщение
а в чем проблема запускать его после этих строчек?
проблема в том что первый поток запуститься только при первом запуске приложения, а последующие запуски он не выполнится, а второй поток будет работать всегда.
0
V0v1k
1160 / 984 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
27.05.2013, 00:19 #8
что-то вы с архитектурой намудрили, обычно используется код наподобие этого
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
login(new LoginCallback(){
           onLogin(){
                  //залогинились
           }
});
......
 public void login(LoginCallback callback) {
 
            // Общение с сервером в отдельном потоке чтобы не блокировать UI поток
            new Thread() {
                @Override
                public void run() {
 
       //здесь важный код который получает от сервера данные
 
                          JSONObject jsoDB = jParserAUMeVolution
                    .getJSONFromUrl(urlMe);
                            
                String api_token = jsoDB .getString("api_token");
                    
                accountMePreferences.api_token = api_token;
 
                accountMePreferences.save(MainActivity.this);
                 callback.onLogin();
    }
    }.start();
Добавлено через 1 минуту
Цитата Сообщение от Stylish2013 Посмотреть сообщение
проблема в том что первый поток запуститься только при первом запуске приложения, а последующие запуски он не выполнится, а второй поток будет работать всегда.
при чем здесь это? записывайте в преференсы что уже залогинились и все. что-то вы намудрили с потоками.
0
Stylish2013
7 / 7 / 1
Регистрация: 20.04.2013
Сообщений: 666
27.05.2013, 00:24  [ТС] #9
так в том то и дело, пока в преференсы данные не будут записаны я не смогу залогиниться. Как только данные там окажутся, всё я залогинился могу работать. Как поступить в моей ситуации?
0
V0v1k
1160 / 984 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
27.05.2013, 00:32 #10
Java
1
2
3
4
5
6
login(new LoginCallback(){
           onLogin(){
               //залогинились, говорим другому фрагменту загружать данные
                  secondFragment.loadData();
           }
});
Добавлено через 34 секунды
я не понимаю проблемы.

Добавлено через 3 минуты
сначала говорите что нужно что-то выполнить после логина, теперь наоборот, я окончательно запутался в вашей каше...

Добавлено через 2 минуты
а чтобы отловить изменение преференсов есть метод registerOnSharedPreferenceChangeListener
0
Stylish2013
7 / 7 / 1
Регистрация: 20.04.2013
Сообщений: 666
27.05.2013, 00:37  [ТС] #11
а можете мне подсказать, как просто во втором потоке сказать: Start только тогда когда

Java
1
2
String api_token = preferens.api_token;
api_token != null
а так ждём до победного конца
0
V0v1k
1160 / 984 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
27.05.2013, 00:39 #12
Java
1
2
3
4
5
login(new LoginCallback(){
           onLogin(){
               startSecondThread();
           }
});
0
Stylish2013
7 / 7 / 1
Регистрация: 20.04.2013
Сообщений: 666
27.05.2013, 00:41  [ТС] #13
Я не понимаю, что такое login и остальное, можно на моем примере?
0
V0v1k
1160 / 984 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
27.05.2013, 00:46 #14
смотрите первую страницу.
0
Stylish2013
7 / 7 / 1
Регистрация: 20.04.2013
Сообщений: 666
27.05.2013, 00:48  [ТС] #15
Проблему, решил другими способами, изменив ход последовательности выполнения программы.
0
27.05.2013, 00:48
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.05.2013, 00:48
Привет! Вот еще темы с решениями:

Дождаться завершения работы AsyncTask и выполнять код дальше
Помогите, пожалуйста. Мне нужно дождаться завершения работы AsyncTask и только...

Оповещение в UI из потока
Доброго времени. суть проблеммы в сл. не работает повторное оповещение UI из...

Остановка потока
Доброго времени суток. Пишу первое приложение под андроид, поэтому прошу...

Завершение потока
Необходимо корректно завершить поток. Сейчас код такой class MyThread...


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

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