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

Передача данных между потоками - Android

Войти
Регистрация
Восстановить пароль
Другие темы раздела
Android ВМ Windows на Android http://www.cyberforum.ru/android-dev/thread1796962.html
Существует ли такое в реале, чтоб работало нормально, можно ли самому сделать на других программах (Delphi, Java, visual studio)?
Android Как разместить 2 элемнта с центаром на одной прямой? Я не могу понять, как можно в активности разместить два элемента так, чтобы их центры были расположены на одной прямой... Если, например, разместить изображение с android:layout_alignBottom="@+id/нужный элемент", то получится некрасиво, нужно именно с центрами на одной прямой http://www.cyberforum.ru/android-dev/thread1796952.html
Убрать скролл в ListView Android
Пишу форму для настольной игры. На форме несколько списков ListView, каждый из которых скрывается по кнопке. Всё это находится в ScrollView. Я ожидал, что списки будут видны полностью, высотой будут по размеру контента и прокручиваться вместе со всей страницей от ScrollView, но оказалось, что у списка показывается только 1 элемент, остальное нужно прокручивать скроллом от ListView. И если на...
TableLayout как отловить значение строки по нажатию (для Андроид на java) Android
Я только начинающий, прошу помочь по возможность, уже 2 день ищу информацию так и не понял как реализовать. Необходимо по нажатию на табличной части tableLayout отловить все значения колонок которые находятся в строке по которую нажали. Код такой: 1.ZakazSpisok.java import android.app.Activity; import android.app.DatePickerDialog; import android.app.TimePickerDialog; import...
Android MediaPlayer: как продолжить работу аудио-плеера в фоновом режиме? http://www.cyberforum.ru/android-dev/thread1796905.html
Как продолжить работу ауди плеера в фоновом режиме? Сервис создал, но что туда надо передать? Весь код выполняется в Activity.
Android Android WebSocket Здравствуйте, начинаю разбиратся с WebSocket, использую библиотеку nv WebSocket Client, соединится с сервером получилось, передать и получить сообщение тоже. Но у меня есть несколько Activity в приложении, в которых использую сокет-соединение, как правильно организовать логику не ясно, я так понимаю надо какой-то клас, в котором будет переменная с соединением, и с него тащить connection для... подробнее

Показать сообщение отдельно
vxg
Модератор
3057 / 1859 / 195
Регистрация: 13.01.2012
Сообщений: 7,076
22.08.2016, 16:26     Передача данных между потоками
JavJun, пример с Handler (гусары, не кидайте сапогами)
1 App
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
public class App extends Application {
    public static final int interval = 100;
 
    public static Thread thread = null;
    public static boolean processed = true; 
    
    public static void waitForThread(Thread thread) {
        if (thread != null) {
            try {
                thread.join();
            } catch (InterruptedException e) {
            }
        }
    }
 
    public static void interrupt(Thread thread) {
        if (thread != null) {
            thread.interrupt();
        }
    }
    
    public static void clean(Handler handler) {
        if (thread != null && thread.isAlive()) {
            interrupt(thread);
            waitForThread(thread);
        }
        processed = true;
        if (handler != null) {
            handler.removeMessages(0);
        }
    }
 
    public static void startThread() {
        thread = new Thread(new Runnable() {
            public void run() {
                //поток работает и складывает данные в статику App
            }
        });
        thread.start();
    }
}
2 MyActivity
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
public class MyActivity extends Activity {
    private Handler handler;
    
    ...
    @Override
    public void onClick(View arg0) {
        App.clean(handler);
        
        App.startThread();
        App.processed = false;
        handler.sendEmptyMessage(0);
    }
    ...
    
    @Override
    protected void onPause () {
        super.onPause();
 
        handler.removeMessages(0);
    }
    
    @Override
    protected void onResume () {
        super.onResume();
        
        handler = new Handler() {
            public void handleMessage(android.os.Message msg) {
                if (!App.thread.isAlive()) {
                    App.processed = true;
                    
                    //когда поток отработал берем данные из статики App и показываем пользователю
                } else {
                    //если поток еще не отработал, то мы все равно можем взять то что уже готово прямо здесь
                    
                    handler.sendEmptyMessageDelayed(0, App.interval);
                }
            }
        };
        if (!App.processed) {
            handler.sendEmptyMessage(0);
        }
    }
}
Добавлено через 3 минуты
только аккуратнее с данными что бы не попасть в них одновременно с потоком
 
Текущее время: 14:33. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru