Существует много факторов, влияющих на скорость, таких как скорость соединения (Wi-Fi / 3g / 4g / hsdpa) или время отклика сервера. или если пользователь параноик и построил клетку Фарадея. Это всего лишь несколько возможностей. Вам просто нужно сделать все возможное, с помощью повышения производительности и обработки ошибок (однако я бы хотел что-то сделать, чтобы избежать ранних проблем с оптимизацией).
Вы можете посмотреть на простые вещи, такие как использование JSON поверх XML, поскольку он имеет меньший размер, или даже использовать сжатие.
Я бы сказал, что хотя я никогда этого не делал, вы могли бы использовать UDP, но это зависит от того, нужны ли вам 100% ваши пакеты данных для получения. Насколько я понимаю, TCP пытался обеспечить доставку пакетов, однако из-за этого он медленнее. Например, если это какой-то FPS, я бы использовал UDP, однако, если он основан на поворотах, то с TCP все будет в порядке.
Пример учебника по UDP можно найти здесь: http://www.helloandroid.com/tutorials/simple-udp-communication-example
Если вы хотите опрашивать, убедитесь, что делаете это асинхронно, так как вы не хотите, чтобы это происходило в главном потоке. Вы могли бы использовать AlarmManager, так как сервис не нужен, хотя, как вы сказали, «нет необходимости опрашивать, когда пользователь не играет», вы можете реализовать свои собственные настройки
В помощь здесь приведены ссылки на некоторые учебные пособия по Alarm и AsyncTask: