Прежде чем вы попадете в стену текста ниже, мой главный вопрос: как лучше способ структурировать это приложение?
Теоретически мое приложение довольно простое. Я установил VPN с помощью устройства Bluetooth или USB-устройства. USB имеет приоритет, если оба устройства доступны. Пользовательский интерфейс отображает только доступность и состояние подключения каждого устройства (а также журнал событий / отладки). Это приложение почти всегда будет работать в фоновом режиме.
Я новичок в Android и Java, поэтому мне было трудно разобраться в нюансах. Но я много читал и экспериментировал. Прямо сейчас моя функция MainActivity содержит логику управления пользовательскими службами USB и BT, которые расширяют VpnService, и это работает довольно хорошо. Но у меня есть некоторые проблемы, связанные с жизненным циклом операций и служб - в основном, у меня возникают проблемы с обработкой ВСЕХ вариантов использования, которые привели к проблемам устойчивости, когда я подключаю / подключаю / отключаю устройства BT / USB.
Я подумываю переписать это приложение, но не могу придумать, как избежать таких проблем. У меня есть довольно хорошее представление о жизненном цикле компонентов Activity и Service - поэтому я подумал, что приложение будет лучше структурировано, если я переместу логику управления из действия UI в постоянный сервис, который контролирует USB и BT Сервисы. Но я борюсь с принятием решения о том, как обрабатывать различные события асинхронного устройства, которые могут произойти, когда я пытаюсь обработать операции блокировки / асинхронности. Основной пример здесь - когда я пытаюсь подключиться к (уже сопряженному) устройству Bluetooth, и устройство USB подключено. Мне нужно убедиться, что соединение BT завершается, и если это удается, мне нужно отключить его (и дождаться окончания), затем подключить устройство USB и запустить VPN. Из-за непредсказуемости BT-соединения я также хотел бы иметь возможность тайм-аута для операций, чтобы я мог отменить их, если они занимают больше времени, чем нужно. Большинство моих попыток такого рода функциональности, похоже, не работают. Я думаю, что события (намерения), которые я пытаюсь отправить, заблокированы до завершения операций.
Итак, надеюсь, вы все еще со мной .. Как бы вы структурировали это приложение? У меня есть много фильтров намерений (событий устройств USB / BT), и мне нужно тщательно контролировать порядок операций - позволить каждой операции завершиться, проверить ее результат, а затем выяснить, что делать дальше, на основе ВСЕХ событий, которые произошли до того момента, когда решение принимается.
Спасибо,
Stauff4