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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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