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

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

Войти
Регистрация
Восстановить пароль
 
Stylish2013
7 / 7 / 1
Регистрация: 20.04.2013
Сообщений: 666
#1

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

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

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

Добавлено через 1 минуту
если нужна синхронизация между двумя потоками используйте join()/wait().
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);

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

В другом классе поток запускается по аналогии. Но мне нужно его не запускать пока данные не будут получены первым потоком.
V0v1k
1158 / 982 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
27.05.2013, 00:11     Завершения потока #6
а в чем проблема запускать его после этих строчек?
Stylish2013
7 / 7 / 1
Регистрация: 20.04.2013
Сообщений: 666
27.05.2013, 00:13  [ТС]     Завершения потока #7
Цитата Сообщение от V0v1k Посмотреть сообщение
а в чем проблема запускать его после этих строчек?
проблема в том что первый поток запуститься только при первом запуске приложения, а последующие запуски он не выполнится, а второй поток будет работать всегда.
V0v1k
1158 / 982 / 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 Посмотреть сообщение
проблема в том что первый поток запуститься только при первом запуске приложения, а последующие запуски он не выполнится, а второй поток будет работать всегда.
при чем здесь это? записывайте в преференсы что уже залогинились и все. что-то вы намудрили с потоками.
Stylish2013
7 / 7 / 1
Регистрация: 20.04.2013
Сообщений: 666
27.05.2013, 00:24  [ТС]     Завершения потока #9
так в том то и дело, пока в преференсы данные не будут записаны я не смогу залогиниться. Как только данные там окажутся, всё я залогинился могу работать. Как поступить в моей ситуации?
V0v1k
1158 / 982 / 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
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
а так ждём до победного конца
V0v1k
1158 / 982 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
27.05.2013, 00:39     Завершения потока #12
Java
1
2
3
4
5
login(new LoginCallback(){
           onLogin(){
               startSecondThread();
           }
});
Stylish2013
7 / 7 / 1
Регистрация: 20.04.2013
Сообщений: 666
27.05.2013, 00:41  [ТС]     Завершения потока #13
Я не понимаю, что такое login и остальное, можно на моем примере?
V0v1k
1158 / 982 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
27.05.2013, 00:46     Завершения потока #14
смотрите первую страницу.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.05.2013, 00:48     Завершения потока
Еще ссылки по теме:

Android Ожидание завершения AsyncTask
Почему после завершения работы приложение активно? Android
Android Дождаться завершения работы AsyncTask и выполнять код дальше
Остановка потока Android
Android AsyncTask не выполняет код после завершения

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

Или воспользуйтесь поиском по форуму:
Stylish2013
7 / 7 / 1
Регистрация: 20.04.2013
Сообщений: 666
27.05.2013, 00:48  [ТС]     Завершения потока #15
Проблему, решил другими способами, изменив ход последовательности выполнения программы.
Yandex
Объявления
27.05.2013, 00:48     Завершения потока
Ответ Создать тему
Опции темы

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