studio android android-service android-alarms android-wake-lock samsung-touchwiz

android - studio - La función "Optimización de la aplicación" de Samsung mata las aplicaciones en segundo plano después de 3 días



android studio powermanager (4)

Actualmente estamos desarrollando una aplicación para Android que es una aplicación de seguimiento de fitness. Se ejecuta constantemente en segundo plano, y funciona bien en la mayoría de los dispositivos, pero hemos tenido problemas con la aplicación de la muerte por completo en algunos dispositivos Samsung. Después de algunas investigaciones, parece que algunos dispositivos de Samsung tienen una función de "Optimización de la aplicación" completamente personalizada ( http://forums.androidcentral.com/samsung-galaxy-s6/599408-app-optimisation-after-updating.html ), que es básicamente una versión (muy) primitiva de la función Doze que existe en versiones posteriores de Android que básicamente solo asesina aplicaciones si no se han utilizado durante tres días.

Como esta aplicación está más o menos haciendo solo el registro y no abre la actividad, representa un gran problema para nosotros, ya que esta función está habilitada previamente en muchos dispositivos Samsung. El problema se resuelve mediante el uso de un servicio en primer plano, pero eso es un martillo de una solución que requiere molestar al usuario con una notificación constante, y realmente no necesitamos que la aplicación esté en primer plano. Estamos bien con la potencia normal. Gestión de Android.

La función de optimización de la aplicación Samsung establece claramente que "optimizará" las aplicaciones si no se han utilizado durante tres días. ¿Alguien tiene una idea de lo que Samsung considera "usado" y puedo desencadenar eso?

Lado: en mi opinión, esta es una característica mal implementada que hace que el desarrollo en Android sea más hostil. Además de nuestro caso de uso, se romperá cualquier aplicación de mensajería. Si no fuera por el hecho de que Facebook Messenger y Whatsapp están programados para estar exentos de la aplicación, los usuarios se estarían volviendo locos porque estaría rompiendo sus experiencias.


Estamos bien con la gestión normal de energía de Android

¿Eres tú? De los documentos de Android

Sin embargo, como el usuario no tiene conocimiento directo de un servicio en segundo plano, en ese estado se considera un candidato válido para matar, y debe estar preparado para que esto suceda. En particular, será más probable que los servicios de larga duración se eliminen y se garantice que se eliminen (y se reinicien si es apropiado) si permanecen iniciados el tiempo suficiente.

Tres días parece que caería bajo "largo plazo ... garantizado para ser asesinado".

Si el problema no es que su servicio haya finalizado, pero que no se haya reiniciado, puede usar el AlarmManager para verificar regularmente el estado de su servicio y reiniciarlo, si es necesario.


¿Hay alguna razón por la que no pueda agregar su servicio a la lista de "no optimizar"?

Parece que el usuario puede hacer esto, por lo que debe haber alguna base de datos o configuración en algún lugar que lo controle.

Alternativamente, si detecta que está instalando en uno de los dispositivos, abra la página de actividad de optimización y muestre un mensaje que dice "¡No nos optimice!".


En mi opinión, debería implementar un ''Receptor de difusión'' que escuche un ''Intención'' personalizado y este ''Intención'' para ser transmitido por el ''Servicio'' del método ''onDestroy ()'' del ''Servicio'' porque cuando el ''Sistema'' mata al ''Servicio'' este método se llamará definitivamente. Y cuando el ''Receptor de difusión'' recibe la ''Intención'', debe iniciar el ''Servicio'' nuevamente. Y para distinguir entre la detención del ''Servicio'' o el ''Sistema'' que detiene el ''Servicio'' solo use algunos ''booleanos'' almacenados en ''SharedPreferences'' y luego en el ''Receptor de difusión'' usted decide si activar el ''Servicio'' o no


Estoy de acuerdo con todos ustedes, la optimización de la aplicación de Samsung es una característica terrible. Doze es mucho mejor.

Ahora para mi respuesta:

Tengo un borde S6, así que sé un poco cómo funciona.

El sistema puede detectar si abres una aplicación. Samsung usa eso en la optimización de la aplicación y ahorrará energía en las aplicaciones que no se hayan usado en más de tres días. Sin embargo, es una práctica terrible.

Ignora los procesos en segundo plano que pueden ser críticos para las aplicaciones, e incluso si es una aplicación que usa activamente, por ejemplo, un rastreador de ejercicios, tendrá problemas. Para citar lo que dice dentro de la lista de optimización de aplicaciones:

"Para ahorrar energía de la batería, las aplicaciones que no se han utilizado durante más de 3 días se designarán para ahorrar energía. Las aplicaciones designadas para ahorrar energía pueden no mostrar notificaciones" (puede que no sea exactamente correcta para cada palabra, se traduce desde mi dispositivo corriendo con noruego como idioma

Como tal, aplicaciones que:

  • Se han configurado manualmente para ahorrar energía.
  • Se configuran automáticamente para ahorrar energía (3 días sin usar)

Dará problemas con los procesos de fondo y tal.

Pero:

El usuario puede configurar cualquier aplicación para nunca ahorrar batería, incluso después de 3 días. Así que con esto en mente, consideremos

Soluciones

Hay un escenario en el que no necesita preocuparse por la aplicación y la optimización de la aplicación:

Cuando la optimización de la aplicación está deshabilitada.

Dejando de lado eso, en realidad solo hay dos cosas que puedes hacer:

  1. Solicite a los usuarios de Samsung que deshabiliten la optimización de la batería en su aplicación para evitar problemas

  2. Como sugirió @MinaSamy, SyncAdapter y tener una sincronización periódica. No estoy seguro de si funciona, ya que no lo he probado yo mismo

y, por supuesto, una tercera opción que no puede ser vista como una solución:

  1. Espero que la optimización de la aplicación esté deshabilitada o ignore los problemas.

Ahora,

¿Alguien tiene una idea de lo que Samsung considera "usado" y puedo desencadenar eso?

Como mencioné anteriormente, se utiliza = abierto. Lo que significa que si la aplicación está abierta, la cuenta regresiva de 3 días se reiniciará. No estoy seguro de si Samsung ha considerado cosas como la apertura accidental (presione el ícono y presione el botón de inicio al instante)

Por lo que sé, no puede desencadenar un evento que lo mantendrá vivo (a menos que SyncAdapter haga el truco)

Y para aclarar los hechos, de la respuesta de @Neil:

Parece que el usuario puede hacer esto, por lo que debe haber alguna base de datos o configuración en algún lugar que lo controle.

El usuario tiene control total sobre la función y puede hacer una de estas cuatro opciones:

  • Siempre optimiza <- Para cada aplicación
  • Optimización automática <- Para cada aplicación
  • Nunca optimices <- Para cada aplicación
  • Deshabilitar la optimización de la aplicación <- Evita que se optimice cualquier cosa