Подключение нового устройства запускает ряд асинхронных событий, которые неочевидны, но заслуживают понимания.
Физически подключен
 Tradefed использует библиотеку ddmlib (Java adb библиотеку) для обеспечения базового взаимодействия с adb и устройствами. Частью этого решения является интерфейс IDeviceChangeListener , который позволяет получать новые события устройств, такие как:
-  deviceConnected: когдаadbвидит новое устройство
-  deviceDisconnected: устройство больше не отправляет данные вadb
-  deviceChanged: При возникновении важного состояния устройства (например, устройство отключено или устройство подключено)
 Этих событий на уровне adb достаточно для определения, подключено ли устройство, находится ли оно в сети или офлайн. Но для тестовой среды нам требуется более строгое состояние, чтобы гарантировать, что устройство действительно готово к запуску тестов; оно не должно быть подвержено потенциальным сбоям в состоянии, которые могут возникнуть при подключении нового устройства.
Вот последовательность событий в Tradefed:
-  Устройство распознано как deviceConnectedи открытое для обычных событий отadb
- Создается внутреннее событие Tradefed, которое: - Проверьте, известно ли уже устройство; Tradefed сохраняет внутреннюю ссылку на некоторые устройства (особенно на то, которое в данный момент выделено и выполняет тесты), чтобы TF не терял их случайным образом.
-  Проверьте, находится ли устройство ONLINEилиOFFLINE.
 
- Если устройство: - OFFLINE: Устройство будет переведено в состояние Tradefed- CONNECTED_OFFLINE, которое пока не позволяет устройству выполнять тесты. Если устройство позже подключится к сети, оно пройдёт цикл- ONLINE. При получении события- deviceDisconnectустройство будет просто удалено из списка.
- ONLINE(как видно adb): Устройство будет переведено в состояние- CONNECTED_ONLINEи его доступность будет проверена для тестового распределения:- checking_availability.
 
- Если проверка - availabilityпройдена успешно, устройство будет отмечено как доступное для распределения тестов и сможет выполнять тесты. В противном случае устройство будет отмечено как- unavailableдля распределения и не сможет принимать тесты.
 Все эти состояния отражаются в консоли Tradefed при выводе списка устройств с помощью: tf> list devices
 Важно отметить, что когда устройство в данный момент выделено для теста, большинство вышеперечисленных действий не выполняется, и Tradefed определяет состояние устройства самостоятельно. Поэтому устройство может исчезнуть из adb devices , оставаясь при этом в списке Tradefed. Это может произойти, например, когда тест перезагружает устройство. 
Виртуальное устройство, подключенное с помощью adb connect
 При создании удалённого виртуального устройства Tradefed подключается к нему с помощью adb connect . Обычно это приводит к тому, что устройство отображается в adb devices как <some ip>:<port number> и следует той же последовательности, что и физически подключенные устройства. 
Отслеживание устройства при возникновении события deviceConnected
 Когда происходит deviceConnected , ddmlib создает новую ссылку IDevice для отслеживания нового подключенного устройства.
 Tradefed использует эту ссылку и оборачивает её в собственную реализацию интерфейса устройства ITestDevice для предоставления более продвинутого сервиса. Но базовый IDevice всегда берётся из ddmlib .
Это означает, что при подключении нового устройства создаётся новый объект ITestDevice, связанный с IDevice. Когда это происходит во время вызова и используется ITestDevice, базовый IDevice всё равно заменяется, чтобы тестирование могло продолжаться на правильной ссылке. Это происходит автоматически при каждом отключении/подключении устройства (например, при перезагрузке).
