Форум программистов, компьютерный форум, киберфорум
Наши страницы
Программирование Android
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.67/3: Рейтинг темы: голосов - 3, средняя оценка - 4.67
Tester64
396 / 357 / 46
Регистрация: 22.05.2013
Сообщений: 2,518
1

Потокобезопасный вызов процедур через Handler

04.11.2013, 00:21. Просмотров 524. Ответов 2
Метки нет (Все метки)

Пытаюсь написать потокобезопасные сообщения через через Handler.

Примерно это выглядит ТАК:

Java
1
2
3
4
5
6
7
private static Handler Tread1_Handler = new Handler(); // заготовка для синхронизации с основным потоком!
private Context cont; // =this
 
...
Tread1_Handler.post(new Runnable() {public void run() { // синхронизируем
   Toast.makeText(cont, "HELLO!", Toast.LENGTH_LONG).show();
}});
Все работает... но! Как мне ПЕРЕДАТЬ потоко-безопасно несколько параметров разного типа в конкретно ЭТОТ вызов потока? Например заменить HELLO на String mess? Передать булеан для LONG или SHORT?
Если делать это глобальными переменными, то при вызове подряд двух сообщений могу получить одинаковый результат - выполнение первого вызова началось только после заполнения вторых параметров.

Пока что решаю это списком типа PUSH и POP, но это не удобно... Подозреваю что есть более простое ГОТОВОЕ решение! Но как??? Подскажите пожалуйста!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.11.2013, 00:21
Ответы с готовыми решениями:

Handler
import android.app.Activity; import android.os.Bundle; import android.os.Handler; import...

Handler
Вот допустим обьект Handler был создан в активити(то есть в главном потоке). И мы запускаем через...

Не работает Handler
Я нахожусь на 66 уроке startandroid, здесь упоминается Handler. Почему то отсутствуют у меня...

Handler timer
Добрый вечер. С помощью какого метода в Handler...

Handler vs Service vs AsynkTask
Есть 2 Activity, пусть A1 и A2. В методе onCreate() Activity A1 запускается новый поток, в котором...

2
Netscape
374 / 361 / 52
Регистрация: 02.10.2009
Сообщений: 712
Записей в блоге: 4
04.11.2013, 00:33 2
1. Сделать метод synchronized.
2. Вызвать его.
3. Готово. Вы восхитительны.
Java
1
2
3
4
5
6
7
8
public synchronized void method(final String param1, final long param2) {
Tread1_Handler.post(new Runnable() {
     @Override
     public void run() {
          Toast.makeText(cont, param1, Toast.LENGTH_LONG).show();
     }
});
}
А еще есть volatile (работает корректно, кажется, только с 4.0)
1
Tester64
396 / 357 / 46
Регистрация: 22.05.2013
Сообщений: 2,518
04.11.2013, 01:33  [ТС] 3
То что нужно! Спасибо!
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.11.2013, 01:33

Про Handler и ProgressBar
Есть 2 кнопки - Start и Stop, соответственно запуск и остановка прогресса в ProgressBar, запуск...

Handler, поток не останавливается
Добрый вечер. Не могу остановить таймер, при переходе на другую Activity. Возможно ли это вообще? ...

Handler и интервал времени
Создаю хэндлер: Handler h = new Handler(); h.post(obrtimer); Runnable obrtimer = new...


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

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

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