Обход диспетчера памяти; держать приложение в живых

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

Есть ли обходные пути для этой проблемы?

Ваше здоровье

1. На устройстве также должно быть приложение 2. Не лучше ли просто отправить электронное письмо, может быть, из самого веб-приложения 3. Не позволяйте экрану спать, и вы получите уведомление.
@roxan - почему комментарий через 2 часа после комментария под ответом, который я опубликовал, сказал все?
@ t0mm13b Извините, я не увидел ваш ответ в окне просмотра.

Ответы (2)

Предположительно, устройство использует Wi-Fi для доступа в Интернет — возможно, стоит попробовать это:

  • Настройки > Wi-Fi
  • Нажмите на меню, чтобы вызвать Advanced
  • Нажмите на этот пункт меню
  • Держите Wi-Fi включенным во время сна , проверьте это, убедитесь, что он установлен на Никогда

Таким образом, когда устройство переходит в спящий режим, Wi-Fi все еще активен и работает, а веб-приложение все еще должно работать и

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

Редактировать

Приведенный выше ответ не является правильным ответом, скорее из комментариев ниже, это определенно тот, который я цитирую.

Возможно, подход к управлению заданиями сделан неправильно , особенно в контексте Android — пользовательское приложение, в котором есть служба , использующая частичную блокировку пробуждения для «пингования» проверки заданий, отправки события в приложение и приложение. просыпается. ИМХО, браузер не подходит для требований в вашем случае.

Короче говоря, нет ничего, что можно было бы сделать, чтобы веб-браузер оставался «живым», пока устройство спит, как Android, за кулисами, когда ядро ​​​​не находится в состоянии сна, отслеживает, какие приложения запущены, и в зависимости от на ограничения мощности и памяти, особенно в случае страницы веб-браузера (если она имеет много стилей, чем более сложная страница, тем больше ресурсов в результате поглощается, особенно если за ней много Javascript) страница) это может быть задачей ядра, чтобы сбить ее и извлечь из памяти, следовательно, это ненадежный маршрут.

TL; DR: правильное приложение, а не просто веб-браузер, решит проблему ОП.

Не по теме: в разделе технологий в новостях BBC была статья о просмотре веб-страниц с мобильных устройств и о том, как это может повлиять на батарею из-за того, как веб-страницы спроектированы, скорее, они были разработаны неправильно для мобильной платформы, слишком много стилей, слишком много сценариев, не говоря уже о Flash, все они отрицательно сказывались на том, как Android отображает/отрисовывает страницу, что, в свою очередь, означало, что для этого требовалось много циклов процессора.

Вероятно, это не проблема с Wi-Fi, а скорее сам Android приостанавливает работу приложения браузера после длительного периода бездействия, чтобы освободить эту память для чего-то другого. Но я не знаю, как предотвратить это.
Возможно, подход к управлению заданиями реализован неправильно, особенно в контексте Android — пользовательское приложение, в котором есть служба, использующая частичный wakelock для «пинга» проверки заданий, отправки события в приложение, и приложение просыпается. . ИМХО, браузер не подходит для требований в вашем случае... :)
Я согласен с этим. Браузер на мобильном устройстве, безусловно, не лучший способ добиться этого. Я думаю, что лучшим вариантом было бы создание приложения, поддерживающего обмен сообщениями Android Cloud to Device (C2DM). Это позволит серверу уведомлять приложение, не требуя, чтобы приложение было открыто или даже запущено.
Мы только что перешли с Win Mo, которое было приложением, но теперь оно не работает в Интернете. Да, реальная проблема заключается в том, что управление памятью в Android спит браузером для освобождения памяти, ничего общего с WiFi (плюс мы пользуемся мобильными данными 95% времени), и отсутствие электронной почты не было бы лучше, данные должны вводить, что намного проще и быстрее через приложение. Я согласен, веб-приложение — это неправильный путь, оно должно было быть приложением, но, к сожалению, это не так. Кто-нибудь еще знает, как сохранить браузер «живым» в памяти?

Лучшим вариантом было бы настроить параметры minfree убийцы низкой памяти.

Немного фона:

Убийца нехватки памяти является основой управления памятью Android. Это более элегантный подход, чем oomkiller в Linux, и он активно поддерживает свободный пул, а не срабатывает только тогда, когда у вас полностью закончилась свободная память. Он разделяет приложения на несколько категорий для уничтожения, если пул свободной памяти становится ниже определенных точек. Как правило, они располагаются в следующем порядке, от первого к последнему:

EMPTY_APP — это приложения, которые ничего не делают и ничего не ждут. Они просто сидят в памяти.

CONTENT_PROVIDER — это фоновые приложения, которые содержат содержимое активных приложений (например, магазин игр использует одно из них для периодической проверки обновлений. Синхронизация HTC с Facebook — еще один распространенный пример).

HIDDEN_APP - Эти сидят в фоне, ничего не делают, но все еще живы и возможно чего-то ждут.

SECONDARY_SERVER — сервер, работающий в фоновом режиме для предоставления услуг запущенному в данный момент приложению.

VISIBLE_APP — это приложение, которое находится в фоновом режиме, но в данный момент оно что-то делает.

FOREGROUND_APP — это то, что сейчас запущено и отображается на экране.

Если пул свободной памяти упадет ниже определенного значения (например, 80 МБ — это значение по умолчанию на моем GS3), система сначала начнет убивать все, что указано как пустое приложение, пока пул не вернется выше этой линии. Если после того, как он убьет все пустые приложения, память все еще будет ниже следующей строки (например, 64 МБ), она запустится для поставщиков контента и так далее, пока, в конце концов, только приложение переднего плана не займет всю память (Вкл. мой GS3, если все, кроме приложения переднего плана, было убито, а свободной памяти все еще меньше 32 МБ) и угрожает системе, оно в конечном итоге будет уничтожено.

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

Приложение MinFreeManager позволит вам настроить эти значения. В качестве альтернативы, их можно редактировать непосредственно /sys/module/lowmemorykiller/parameters/minfreeтам, где параметры находятся на страницах (4 килобайта, поэтому значение 8192 означает 32 МБ как ((8192*4)/1024=32 МБ), и перечислить их в порядке, обратном тому, что я перечислил выше. Оба из них потребуется root.Если у вас нет root, мы ничем не можем помочь.

В вашем случае параметр HIDDEN_APP (4-й пункт в файле minfree), вероятно, то, что нам нужно изменить. Например, на моем GS3 этот параметр по умолчанию равен 56 МБ. Сокращение этого вдвое до 28M или использование мягкой предустановки в MinFreeManager было бы хорошей отправной точкой для настройки.

ОП не упоминает, рутированы они или нет, но, учитывая вопрос ОП, это устройство, предназначенное для работы (возможно, не ОП, а принадлежащее их компании), поэтому ваш ответ не совсем по делу! И для приложения MinFreeManager требуется root, а также OP также не собирается связываться с рассматриваемым устройством! :)