2016-10-13 1 views
0

У нас есть приложение, которое хранит некоторые данные конфигурации в памяти. Конфигурационные данные извлекаются с сервера при запуске приложения. Однако мы хотели бы, чтобы эта конфигурация время от времени обновлялась (поэтому новые данные конфигурации с сервера распространяются на клиента). Наше приложение обычно не остается на переднем плане очень долго.Могу ли я полагаться на фоновый Android-процесс, чтобы его убили за разумные промежутки времени

Согласно документации на Android, можно удалить фоновый процесс, чтобы освободить некоторую память. Однако, похоже, нет никакой гарантии, что это произойдет в течение разумного промежутка времени (скажем, например, 4 часа). Таким образом, приложение может быть живым навсегда, если память не требуется. https://developer.android.com/guide/components/processes-and-threads.html

Можем ли мы полагаться на Android, чтобы убить фоновые задачи через некоторое время? Или нам нужно создать механизм для обновления данных конфигурации во время работы приложения?

Можете ли вы предоставить некоторую документацию или обоснованные эксперименты для одной или другой стороны?

С наилучшими пожеланиями

Бен

+2

Вы должны создать механизм для обновления данных конфигурации. Как гласит документ, нет никакой гарантии, что фоновый процесс будет уничтожен, и даже в этом случае, когда это произойдет. Это зависит от доступной памяти, так как приложение находится на переднем плане/фоне, так как фоновый процесс имеет указатели на живые объекты, когда он делает что-то или просто спит, а приложение сначала находится в задней части или в глубине ... Кроме того, все это, термин «разумный» слишком субъективен! – rupps

ответ

1

Однако, кажется, нет никакой гарантии, что это произойдет в течение разумного периода времени (скажем, например, 4ч).

Правильность, нет гарантий.

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

Это произошло бы только на устройстве, которое никогда не требовалось для разветвления нового процесса, и где общая сумма всей существующей системы в общем объеме необходимой системной памяти помещается в доступную системную память. чрезвычайно маловероятно, что оба они верны для любого данного устройства. Это может иметь место в конкретных сценариях, где вы контролируете Android, аппаратное обеспечение, все источники данных и т. Д. (Например, используя Android во встроенной системе).

Можем ли мы полагаться на Android, чтобы убить фоновые задачи через некоторое время?

Для некоторой ценности «некоторое время», да. Однако «некоторое время» может длиться больше четырех часов.

Или нам нужно создать механизм для обновления данных конфигурации во время работы приложения?

Ну, у вас уже есть способ ленивой загрузки данных конфигурации из каждой точки входа вашего приложения (например, для каждого действия). В противном случае ваша реализация «данных конфигурации извлекается с сервера при запуске приложения» уже нарушена и нуждается в ремонте.

Если у вас есть это, то «обновление данных конфигурации во время работы приложения» - это просто вопрос отслеживания времени загрузки данных и включение проверки на устаревание как часть алгоритма ленивой загрузки ,IOW, тогда как прямо сейчас ваш алгоритм «если данные отсутствуют, начните операцию загрузки фона и сообщите вызывающему, что он будет получать данные конфигурации асинхронно», теперь он становится «если данные отсутствуют или слишком стары, ударьте выключить операцию загрузки фона и сообщить вызывающему, что он будет получать данные конфигурации асинхронно ».

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

  • Нет связанных вопросов^_^