Неблокирующий ввод-вывод для Android

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

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

Любое предложение?


person cdecker    schedule 27.11.2010    source источник


Ответы (2)


Ознакомьтесь с сокетами, селекторами и каналами 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

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

person mchang    schedule 27.11.2010
comment
Это выглядит идеально для меня. Большое спасибо :-D - person cdecker; 04.12.2010
comment
Первая ссылка на самом деле не охватывает неблокирующий ввод-вывод. Однако ссылка на пакет nio может оказаться полезной. - person Chris Stratton; 16.07.2012

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

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

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

person Chris Stratton    schedule 28.11.2010