Подтвердить что ты не робот

Функция Samsung "Оптимизация приложения" отключает фоновые приложения через 3 дня

В настоящее время мы разрабатываем приложение для Android, которое является приложением для отслеживания работоспособности. Он работает постоянно в фоновом режиме, и он отлично работает на большинстве устройств, но у нас были проблемы с тем, что приложение полностью умирает на некоторых устройствах Samsung. После некоторого расследования кажется, что некоторые устройства Samsung имеют полностью настраиваемую функцию "Оптимизация приложений" (http://forums.androidcentral.com/samsung-galaxy-s6/599408-app-optimisation-after-updating.html), которая в основном ) примитивная версия функции Doze, которая существует в более поздних версиях Android, которая в основном просто убивает приложения, если они не использовались в течение трех дней.

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

Функция оптимизации приложений Samsung четко заявляет, что она будет "оптимизировать" приложения, если они не использовались в течение трех дней. Есть ли у кого-нибудь представление о том, что Samsung считает "используемым", и могу ли я как-то вызвать это?

Side-rant: На мой взгляд, это плохо реализованная функция, которая делает разработку Android более агрессивной. Помимо нашего прецедента, любые приложения для обмена сообщениями прерываются. Если бы не тот факт, что Facebook Messenger и Whatsapp жестко подключены к тому, чтобы быть освобожденными от приложения, пользователи будут сходить с ума, потому что это нарушит их опыт.

4b9b3361

Ответ 1

Я согласен с вами, оптимизация приложений Samsung - ужасная функция. Доза намного лучше.


Теперь для моего ответа:

У меня есть край S6, поэтому я немного знаю, как это работает.

Система может определить, открываете ли вы приложение. Samsung использует это в своей оптимизации приложений и экономит электроэнергию на приложениях, которые не использовались в течение трех дней. Однако это ужасная практика.

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

"Чтобы сэкономить заряд батареи, приложения, которые не использовались более 3 дней, будут назначены для экономии энергии. Приложения, предназначенные для экономии энергии, могут не показывать уведомления" (это может быть не совсем правильно для каждого слова, он переведен с моего устройства, работающего с норвежским языком)

Таким образом, приложения, которые:

  • Были установлены вручную для экономии энергии.
  • Автоматически устанавливается для экономии энергии (3 дня не используются)

Дадут проблемы с фоновыми процессами и т.д.

Но:

Пользователь может установить любое приложение, чтобы никогда не сохранять батарею даже через 3 дня. Поэтому, учитывая это, рассмотрим

Решения

Существует один сценарий, в котором вам не нужно беспокоиться об оптимизации приложений и приложений:

Когда оптимизация приложения отключена.

В стороне от этого, вы можете сделать только две вещи:

  • Попросите пользователей на Samsung отключить оптимизацию батареи в вашем приложении, чтобы предотвратить проблемы.

  • Как предложил @MinaSamy, SyncAdapter и периодическая синхронизация. Не уверен, что он работает, поскольку я сам не тестировал его.

и, конечно, третий вариант, который на самом деле не может рассматриваться как решение:

  1. оптимизация приложения для приложений отключена или игнорирует проблемы.

Теперь,

Есть ли у кого-нибудь представление о том, что Samsung считает "используемым", и могу ли я как-то вызвать это?

Как я уже говорил выше, используется = открыто. Если приложение открыто, обратный отсчет продолжится 3 дня. Я не уверен, что Samsung рассмотрел такие вещи, как случайное открытие (нажмите значок и мгновенно нажмите кнопку home-button)

Значение, насколько я знаю, вы не можете инициировать событие, которое будет поддерживать его (если SyncAdapter не делает трюк))

И чтобы сделать факты понятными, от @Neil ответ:

Кажется, что пользователь может это сделать, поэтому должна быть какая-то база данных или настройка где-то, которая ее контролирует.

Пользователь имеет полный контроль над этой функцией и может выполнить один из этих четырех вариантов:

  • Всегда оптимизировать < - для каждого приложения
  • Автоматическая оптимизация < - Для каждого приложения
  • Никогда не оптимизировать < - Для каждого приложения
  • Отключить оптимизацию приложений < - Предотвратить что-либо от оптимизации

Ответ 2

Есть ли причина, по которой вы не можете добавить свою услугу в список "не оптимизировать"?

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

В качестве альтернативы, если вы обнаружите, что вы устанавливаете на одном из устройств, откройте страницу оптимизации активности и покажите сообщение "Не оптимизируйте нас!".

Ответ 3

По-моему, вы должны внедрить "широковещательный приемник", который слушает обычное "намерение" и это "намерение", которое будет транслироваться "службой" из метода onDestroy() "службы", потому что, когда "Система" убивает "Сервис" , этот метод будет определен определенно. И когда "Broadcast Receiver" получает "Intent", вы должны снова запустить "Сервис" . И чтобы провести различие между тем, что вы остановили "Сервис" или "Систему", остановив "Сервис" , просто используйте некоторые "булевы", хранящиеся в "SharedPreferences", а затем в "Broadcast Receiver" вы решаете, следует ли активировать "Сервис" или нет

Ответ 4

мы отлично справляемся с нормальным управлением питанием Android

Вы? В документах Android

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

Кажется, что три дня он подпал под "долговременный... гарантированный быть убитым".

Если проблема не в том, что ваша служба убита, но она не перезагружена, вы можете использовать AlarmManager для регулярной проверки состояния вашей службы и при необходимости перезагрузки.