Службы в андроиде потребляют много батареи

Я использую службу в Android, которая каждые 3 секунды будет загружать JSON. Моя проблема в том, что эта услуга потребляет много батареи и мобильного трафика. Как загрузить информацию, чтобы только если действительно есть новые данные или обновить данные?


person user3236034    schedule 30.04.2014    source источник
comment
Я бы сказал, уменьшите интервал загрузки до чего-то более разумного, например, от получаса до 2 часов... почему он чувствует необходимость загружать JSON каждые три секунды?   -  person Makoto    schedule 30.04.2014
comment
Спасибо, потому что мне нужно сделать что-то похожее на приложение реального времени, чтобы все пользователи могли сразу видеть данные, когда любой пользователь вносит изменения, некоторые равны чату.   -  person user3236034    schedule 30.04.2014


Ответы (2)


Да, это сильно разряжает батарею. И будет еще больше, если ваш JSON большой. Я бы определенно использовал здесь какой-то механизм, который посылал бы мне «сигнал» всякий раз, когда это JSON менялось. Я предполагаю, что это хранится где-то на удаленном сервере, поэтому вы можете использовать Google Cloud Messaging здесь: всякий раз, когда оно изменяется, ваш удаленный сервер может отправлять устройству сообщение о том, что есть новые данные, доступные для загрузки и загрузки только в это время.

Таким образом, вы не тот, кто спрашивает, но вас информируют, когда появляется что-то новое, поэтому вы не будете разряжать батарею.

Я думаю, это может помочь вам, если вы хотите развернуть GCM:

person nKn    schedule 30.04.2014
comment
Спасибо большое! Попробую то, что вы рекомендуете. - person user3236034; 30.04.2014

Если данные находятся на вашем сервере, вы можете использовать GCM, чтобы уведомить клиентов о том, что доступны новые данные. Получив такое уведомление, загрузите новые данные на устройство. Если данных нет на вашем сервере, вы должны просто периодически извлекать данные. Как это можно сделать? Используйте AlarmManager для настройки будильника, который начнет загрузку Service. Обратите внимание, что вы должны использовать setInexactRepeating, это лучше сэкономит заряд батареи. И последнее замечание: лучше использовать HttpUrlConnection вместо Apache HTTP Client для устройств с версией Android >= Gingerbread.

person nikis    schedule 30.04.2014
comment
Спасибо большое! Попробую то, что вы рекомендуете. - person user3236034; 30.04.2014