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

Доступ к потоку из разных потоков - Программирование Android

Войти
Регистрация
Восстановить пароль
Другие темы раздела
Программирование Android Парсинг файла http://www.cyberforum.ru/android-dev/thread1463166.html
Вопрос отпал сам собой. Удалите тему пожалуйста
Программирование Android Всплывающие диалоги и работа с базой данных Всем доброго дня. Дедлайн ещё ближе, диплом под ещё большей угрозой. Нужно сделать такую фишку. Есть список, в котором данные и БД, тыкая на элемент списка и удерживая, появляется контекстное меню. В меню два элемента, первый удаляет запись, а с помощью второго её нужно редактировать, он-то как раз и не сделан. Думаю, что самым логичным будет сделать всплывающее окно в котором надо будет... http://www.cyberforum.ru/android-dev/thread1463153.html
Кастомизация DatePicker Программирование Android
Господа,здравствуйте! Возникла небольшая проблемка. Есть необходимость разместить на экране DatePicker, при помощи которого пользователь будет указывать свой стаж работы в компании(в годах и месяцах). Однако стандартный DatePicker предлагает указать месяц, день и год. Подскажите как можно его кастомизировать, чтобы отражалось количество лет и месяцев? Заранее благодарен!
Создание таблицы с обработчиком нажатия Программирование Android
Нужно создать таблицу с именами и оценками как на картинке! Таблица должна прокручиваться по вертикали и по горизонтали! И нужно для каждой ячейке привязать OnClickListener!
Программирование Android Firewall Android http://www.cyberforum.ru/android-dev/thread1462912.html
Суть. требуется создать firewall без root для Android (есть примеры https://play.google.com/store/apps/details?id=app.greyshirts.firewall , https://play.google.com/store/apps/details?id=com.netspark.firewall и т.д.) Как я понял, они работают по 1 принципу 1) создают впн соединение, которое по сути, не работает, но при этом с этого соединения приложение, его создавшее, может считывать данные...
Программирование Android GameMaker экспорт под Android Добрый день! У меня временные отсутствие хорошего интернета и я не могу скачать себе Android SDK, а мне это по учебе нужно срочно. Ребят кому не сложно добавте управление под Android и сохраните в apk. P.S Спасибо. подробнее

Показать сообщение отдельно
rugga
0 / 0 / 0
Регистрация: 10.02.2014
Сообщений: 71

Доступ к потоку из разных потоков - Программирование Android

30.05.2015, 16:06. Просмотров 171. Ответов 0
Метки (Все метки)

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
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
private Handler Ocnova = new Handler(); 
private Object sync = new Object();  private potok2 thread2 = null;
 
class potok2 extends Thread {
public boolean motion = false;
//...   
    public void run() {
        while(motion) {
            //...
        }
    }
}
class potok1 extends Thread {
//...String mes.....
   public void run() {
      while(true) {
         //.. socket.read(); // ждем пока не получим mes
         if("start".compareTo(mes) == 0) {
            synchronized(sync) { 
                Ocnova.post(new hand(this, mes)); // вот здесь работает коряво (Текст не отображает, как надо)
                try {sync.wait();} catch (InterruptedException e) {  }
            }
         }
         else if("stop".compareTo(mes) == 0) {
             synchronized(sync) {
                if (thread2 != null && thread2.isAlive() == true) { // если поток2 жив, останавливаем его (thread2 объявлен глобально)
                    thread2.motion = false; thread2.interrupt(); try{ thread2.join(3000); }catch(InterruptedException e){  } thread2 = null;
                }
            }
            break;
         }
      }
   }
}
//GUI-Thread
//...
if(условие) { new potok1().start(); }
//...
class hand implements Runnable {
    private potok1 thread1 = null; private String mes = null;
    public Potok4(potok1 thread1, String mes) {this.mes = mes; this.thread1 = thread1;}
    //...
    public void run() {
        synchronized(sync) {//ecли убрать отсюда thread2, все работает норм, когда же тут стоит thread2 тексты отоброжаются коряво.
            //... 
            if(всякие проверки, которые работаю только в gui) {
                if (thread2 == null || thread2.isAlive() == false) { // если поток2 не запущен, запускаем его (thread2 объявлен глобально)
                    tx1.setText("Поток2 не запущен, запускаем...");
                    thread2 = new potok2(); thread2.motion = true; thread2.start();
                }
                else {
                    tx1.setText("Поток2 уже работает");
                }
            }
            else {
                tx1.setText(mes);
            }
            sync.notify();
        }
   }
}
В общем есть "три" потока: gui-поток, potok1, potok2. Экземпляры класса potok1 запускаются в новом потоке из gui-потока. Экземпляр класса potok2 объявлен глобально, его нужно запускать в новом потоке из gui-потока, и останавливать из потока potok1.
Вот в чем проблема:
Из potok1 нам нужно обращаться к методам(гр. интерфейсу), которые работают только в GUI, поэтому использую Handler. Но даже, если использую Handler, текст коряво отображается или вовсе не отображается. Такое происходит только, если внутри класса hand находится thread2. Если его убрать из hand, все работает нормально. Но мне ведь нужно внутри hand делать манипуляции с thread2, например запустить его. В чем ошибка и как его устранить?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru