Пример асинхронной массовой передачи USB-хоста Android

Я работаю с режимом Android USB Host и хотел бы выполнить асинхронная массовая передача. До сих пор я успешно использовал синхронные массовые передачи, но у меня возникли небольшие проблемы с пониманием того, как части объединяются для асинхронной передачи. Из документации UsbRequest (выделено жирным шрифтом):

Запросы на массовые конечные точки можно отправлять синхронно через bulkTransfer(UsbEndpoint, byte[], int, int) или асинхронно через queue(ByteBuffer, int) и requestWait() [метод UsbDeviceConnection].

Хорошо, значит ли это, что я вызываю queue() из существующего потока выполнения, а затем requestWait() где-то еще в другом потоке? Откуда requestWait() получает мою логику для выполнения после завершения запроса? Большая часть асинхронной работы, которую я проделал, была связана с такими языками, как Javascript и Python, обычно с передачей функции обратного вызова в качестве аргумента. В Java от меня ожидалось, что я, возможно, передам объект, который реализует определенный метод, в качестве обратного вызова, но я нигде не вижу, чтобы это происходило. Возможно, моя ментальная модель всего этого неверна.

Может ли кто-нибудь привести отдельный пример отправки асинхронной массовой передачи?


person Bryce Thomas    schedule 17.08.2012    source источник
comment
Можем ли мы использовать эти методы для записи данных на флешку?   -  person Calvin    schedule 16.10.2012


Ответы (1)


В основном метод requestWait() будет возвращаться после завершения очереди UsbRequest. Вы можете сделать это в той же теме или в другой. Используйте методы setClientData() И getClientData(), чтобы определить, какой запрос только что был выполнен, при условии, что у вас есть более одного невыполненного запроса!

Вы можете поставить в очередь несколько UsbRequests на нескольких EndPoints и использовать их состояние завершения, многократно вызывая requestWait(), пока у вас не останется невыполненных запросов.

person Neil    schedule 12.09.2012