2015-06-11 5 views
1

У меня есть проект Android, который использует синтаксический анализ для его бэкэнд. Чтобы сократить количество вызовов api, я привязывал «не очень важные» данные к локальному хранилищу данных и синхронизовал их один раз в день с помощью AlarmManager и BroadcastReceiver.Использование BroadCastReceiver и AlarmManager

Теперь я хочу синхронизировать данные часто, каждые 2/3 минуты, только когда приложение работает. Как мне это сделать? Использую ли я один и тот же AlarmManager и BroadCastReceiver (изменяя частоту и отменя аварийный сигнал при выходе), чтобы реализовать это? Или есть более эффективный способ?

P.S: Пользователи Parse.com, какие наилучшие способы уменьшить количество вызовов api в таком сценарии? Есть ли какие-то изящные способы?

У меня есть стол Posts, в котором есть тексты, отправленные пользователями и таблица голосов. Всякий раз, когда пользователь создает сообщение, я создаю объект Posts и сохраняю его для разбора. И когда другой пользователь использует приложение, он получает право голоса. Счет подсчета для каждого объекта Post сохраняется в столбце в таблице «Записи», когда и когда голосование выполняется. Но пользовательский выбор сохраняется локально. Это сокращение количества вызовов API, я накапливаю пользовательские варианты со временем и периодически синхронизирую их.

+0

Одним из возможных способов использования API уровня 21+ является использование нового 'JobScheduler' https://developer.android.com/reference/android/app/job/JobScheduler.html. Это действительно зависит от того, какое это приложение, соответственно, как долго и часто средний пользователь будет кэппировать приложение на переднем плане. – momo

+0

Как я могу запустить службу каждый раз, когда мое приложение закрыто? – 55597

ответ

0

Самый простой способ, возможно, будет иметь фильтр аварийного сигнала «ACTION_TIME_TICK» Как бы я не был уверен в производительности (он будет тикать, даже если приложение не запустится). В любом случае, я думаю, что вы можете работать с протекторами, выполнять службу, которая будет запускать обработчик каждые 2-3 минуты, и запускать ее, когда приложение работает, и, конечно, прекратить ее, когда приложение закрывается.

Вы также можете посмотреть HERE.

0

Я использую Parse.com в некоторых приложениях, я думаю, что лучший способ зависит от вашего приложения. Например, вы можете синхронизировать каждый «Пуск» в своем приложении, а также, например, каждый раз, когда вы запускаете своего рода AlarManager.

Я не знаю о вашем приложении, но я использовал для синхронизации данных при каждом изменении на сервере. Итак, как только у меня есть изменения на моем сервере, я отправляю уведомление и обновляю свои данные на мобильном устройстве, но зависит от того, как ваше приложение должно синхронизировать его, если это будет синхронизация с мобильного сервера или сервера на мобильный. Я хотел бы услышать от вас более конкретную информацию о вашем приложении, и мы сможем попробовать хороший подход для вас.

+0

Я обновил свой вопрос с моим вариантом использования. – 55597

+0

@ 55597 Проблема с этим кешем, которую вы делаете, потому что другой пользователь не может иметь последнее обновление, подумал ли вы об этом? Если это не проблема для вас, ваши решения выглядят хорошо. Но я думаю, что с помощью этой модели лучше всегда синхронизировать и отправлять запросы Parse всем пользователям. Как вы думаете ? –

+0

Функция voteCount обновляется синхронно, это единственные данные, которые отображаются всем пользователям. Пользовательские варианты используются для изменения состояний кнопок в приложении того же пользователя. Поэтому не важно сохранять синхронность. Я поддерживаю его только для того, чтобы узнать состояние, когда пользовательский кеш приложения автоматически удаляется. В этом случае мне понадобятся голоса пользователей, которые он уже голосовал, чтобы отразить это в своем приложении. – 55597

Смежные вопросы