- Android OS
- сокети
Чи не знайшов тлумачних відповідей на цю тему.
На даний момент для взаємодії з "залізякою" використовуються сокети. Я створюю сокет (DatagramSocket) на одному мені потрібному порту (можна вибирати і випадковий), все подальші операції повинні проводитися саме з цього порту. Таймаут виставлений в 1 секунду. У всі інші частини (інші потоки) я передаю саме цей створений екземпляр сокета.
Взаємодію з ними наступними образами:
- 1. Періодичний опитування (раз в 4 секунди) - цього вимагає пристрій інакше воно виходить з режиму "захоплення". Використовую вбудований механізм Android - Timer;
- 2. Коли потрібно отримати якісь дані з пристрою або передати на нього я створюю Thread, за допомогою нього відправляю запит і отримую відповідь. Після того як робота закінчена, тред зупиняється (не зациклюватися);
- 3. Потік який повинен крутиться постійно і сприймати тільки потрібні пакети даних, інші ігнорувати. Його запускаю і він просто повинен крутиться (В ньому то і вся проблема, до цього обходився без нього).
Проблема наступна: при введення пункту 3, додаток перестає працювати, как-будто сокет постійно зайнятий. Приклад коду (клас з вищезгаданого пункту 3):
UPD:
Розбираючись з цим питанням, прийшов до того, що мені потрібні неблокірующіх сокети.
Випробував різні приклади - не вдалося нічого з них запустити. Отримую або нічого, або 0.
Відповідно до того, що я хочу зробити з попереднього питання у мене з'явилося два варіанти:
Щоб не бути голослівним створив репозиторій на гітхабе, де виклав всі мої спроби.
Завдання стоїть таке, треба зробити одним зі способів взаємодія з пристроєм по мережі:
1. Тримати один потік в програмі і в ньому організувати чергу запитів. Постійно крутити цикл в потоці, перевіряючи чи є що послати і посилати. Після посилок буде йти блок де ми зчитуємо не настав що небудь.
2. Можна зробити один потік який буде постійно вертіти цикл і в ньому прослуховувати, чи не настав що, а в окремих потоках посилати запити.
На блокуючих сокетах не вдалося написати жодного робочого прикладу в одному потоці, тільки окремо. У результаті виходила конкуренції за сокет.
На неблокірущіх не вдалося отримати навіть примітивного запит / відповідь (я з'ясовую в чому справа)