#android #firebase #firebase-realtime-database
Вопрос:
Я новичок в базе данных firebase в реальном времени, и у меня есть основной вопрос, на который я, похоже, не могу найти ответ.
Мне нужно, чтобы мое приложение для Android отслеживало изменения в базе данных, поэтому я понимаю, что мне нужно использовать addValueEventListener с помощью метода onDataChange. Однако будет ли вызываться метод onDataChange, даже если приложение будет уничтожено? Мне нужно иметь доступ к изменениям информации в базе данных, даже если приложение не работает в фоновом режиме (например, пользователь принудительно выходит из приложения). Это связано с тем, что, когда значения достигают определенной точки, я хочу показывать всплывающее уведомление, поэтому мне нужно иметь возможность считывать значения, даже если приложение не запущено.
Если onDataChange вызывается даже тогда, когда приложение находится в фоновом режиме, будет ли это разряжать батарею, так как телефон всегда отслеживает изменения.
Извините за основной вопрос, но я не смог найти информацию.
Спасибо!
Комментарии:
1. «необходимо иметь доступ к изменениям информации в базе данных, даже если приложение не работает в фоновом режиме». Вы не можете заставить приложение ВСЕГДА оставаться живым в телефоне. Однако у вас может быть фоновая служба.
2. Я немного отредактировал вопросы. Я знаю, что вы не можете заставить приложение быть живым, но мой вопрос в том, когда приложение мертво, продолжает ли прослушивать список событий и будет ли вызываться onDataChange?
3. Если приложение мертво, оно мертво. мертвые ничего не могут сделать. если у вас есть фоновая служба, и даже она мертва, что ж, тогда она мертва.
4. Можете ли вы просто не сообщать о своем обновлении с помощью onPause? Я делаю это с помощью firestore и с минимальными данными. Это может быть плохой практикой, но вы можете отправить обновление до того, как оно будет уничтожено
Ответ №1:
…когда приложение отключено, продолжает ли список событий прослушиваться и будет ли вызываться onDataChange?
Прослушиватели событий активны только в том случае, если активен контекст, в котором они выполняются. Для слушателей, которых вы подключаете к действию, это означает, что они активны во время работы приложения. Даже в этом случае Android может убить слушателей (или, точнее, сокет, который они используют для связи с сервером), если пользователь активно не использует приложение.
Если вы хотите, чтобы прослушиватель оставался активным дольше, вы действительно можете рассмотреть возможность управления прослушивателями в фоновой службе. Но даже в этом случае Android может закрыть прослушиватель, чтобы сохранить время автономной работы. Это единственное, что всегда следует иметь в виду: если ваш вариант использования противоречит предпочтениям пользователя (а большинство пользователей, скорее всего, предпочитают более длительное время автономной работы какой-либо конкретной функции приложения), он вряд ли продолжит работать в долгосрочной перспективе.
Лучшим подходом является объединение прослушивателей с облачными сообщениями Firebase для отправки сообщений. Сообщения FCM с большей вероятностью (хотя и не гарантируется) будут доставляться, когда пользователь не активно использует приложение, и вы можете использовать их для запуска некоторого кода вашего приложения, когда они поступят. Для этого вам понадобятся сообщения данных FCM, именно так большинство приложений доставляют фоновые обновления.
Вы также можете использовать сообщение данных FCM, чтобы просто разбудить свой собственный код, затем прикрепить этот код к прослушивателю и получить его обновления. Этот тип поведения известен как отправка щекотки, поскольку все, что делает сообщение данных, — это пробуждает код приложения.