Я создаю chat app
в android. Приложение будет иметь 100-150 пользователей одновременно (в реальном времени). Данные пользователей поступают с http веб-сервера. Я пытаюсь создать список пользователей в реальном времени, который будет динамически изменяться по мере изменения данных пользователей с сервера. Есть следующий способ решить эту проблему: 1. Я мог бы использовать опрос http
каждые 2 минуты для получения данных с сервера. Есть два способа опроса First
. Используйте класс Timertask. Second
Создайте класс обслуживания и используйте Диспетчер сигналов тревоги. какой метод лучше с точки зрения производительности???? Позже я узнал, что опрос — это настоящий убийца батареи. Есть ли какой-либо другой метод, кроме опроса для решения списка пользователей в реальном времени?? Какие методы современные приложения, такие как facebook, используют для изменения данных в режиме реального времени?
Список пользователей в реальном времени в приложении для Android
Ответы (3)
Почему это необходимо? Я не буду делать это вот так. У вас может быть служба, которая получает данные с вашего сервера и сохраняет их в локальной базе данных. Когда вы начнете службу, это ваш выбор! Я бы не стал качать каждые 2 минуты или что-то в этом роде. Может быть, вы можете реагировать на действия пользователей. Так что, если он откроет приложение или нажмет на список чатов или что-то в этом роде.
Если вам это действительно нужно напрямую, вы можете использовать GoogleCloudMessaging, но я действительно думаю, что это ужасная идея!
По моему мнению, вместо использования опроса с регулярными интервалами вам следует использовать GCM. Всякий раз, когда происходит какое-либо изменение пользователей, вы просто отправляете push-уведомление в свое приложение, а затем в своем BroadCastReceiver просто нажимаете веб-API, чтобы получать последние каналы.
SyncAdapter/AccountManager полезен для вашего варианта использования. Authenticator (который вызывает AccountManager за кулисами) может обрабатывать аутентификацию для вашего приложения. SyncAdapter может выполнять периодическую синхронизацию с сервера на локальное хранилище данных. Вам не придется реализовывать его самостоятельно с помощью AlarmManager. Для примера кода адаптер синхронизации
Ваш сервер будет работать с SyncAdapter без особых изменений. Единственные различия будут в вашем клиенте, например, вместо вызова методов выборки данных сервера в AlarmManager вы вместо этого вызовете их в onPerformSync() вашего класса, который расширяет SyncAdapter.
Надеюсь это поможет.