Неблокирующее IO для Android - PullRequest
4 голосов
/ 27 ноября 2010

Я сейчас пытаюсь оценить, можно ли реализовать проект для Android. Я вижу одну серьезную проблему в том, что, поскольку это P2P-клиент, мы должны держать значительное количество открытых соединений при работе. Теперь соединения не передают большие объемы данных, это скорее система обмена сообщениями, поэтому наличие потока для каждого соединения создает бесполезные издержки, если мы время от времени читаем одно сообщение размером 64 байта.

Так что мне было интересно, есть ли поддержка неблокирующего ввода-вывода, такого как select () или poll () в Linux.

Есть предложения?

Ответы [ 2 ]

6 голосов
/ 27 ноября 2010

Проверьте java.nio сокеты, селекторы и каналы. Некоторые ссылки:

Android: небуферизованный ввод-вывод http://developer.android.com/reference/java/nio/channels/ServerSocketChannel.html http://developer.android.com/reference/java/nio/channels/SocketChannel.html http://www.developer.com/java/article.php/3837316/Non-Blocking-IO-Made-Possible-in-Java.htm

Или, может быть, я не правильно прочитал ваш вопрос.

2 голосов
/ 28 ноября 2010

Конечно.Как только ваше приложение заявляет, что использует интернет-разрешение, вы можете делать все обычные сетевые вещи linux, обычно доступные для пользователя без полномочий root в C, используя NDK, и любые из них из java, которые кто-то (возможно, вы, если никто не побил вас тоже)Надоело писать поддержку.

Ну, одно исключение: ваш оператор мобильной связи, вероятно, не будет разрешать входящие соединения, как и большинство маршрутизаторов Wi-Fi, если вы не настроите их специально.Но это скорее проблемы инфраструктуры, нежели проблемы с самим android.

Возможно, вам также потребуется придумать некоторую комбинацию Activity для предоставления пользовательского интерфейса переднего плана и Service для продолжения фактической передачи в фоновом режиме, простов строке состояния отображается значок.

...