Mi aplicación usa AlarmManager y ha estado trabajando desde hace 4 años. Pero me di cuenta de lo comenzado a fallar en algunos dispositivos.

Estoy bastante seguro de que el código es correcto (yo estoy usando WakefulBroadcastReceiver, y setExactAndAllowWhileIdle para dispositivos con Doze) porque funciona a la perfección en los dispositivos Nexus, pero falla en los dispositivos de algunos fabricantes (Huawei, Xiaomi…).

Dispositivos Huawei, por ejemplo, tienen una especie de administrador de batería que matar a las aplicaciones, y cuando una aplicación es asesinado, programar alarmas están cancelados. Para la configuración de una aplicación como «protegidas» en Huawei administrador de batería se soluciona el problema.

Pero hace poco me di cuenta de que no está trabajando con más dispositivos: Xiaomi, Samsung (tal vez se relaciona con el nuevo «Smart Manager»?)… Parece que este comportamiento se está convirtiendo en un estándar: para matar a fondo las aplicaciones.

Alguien sabe algo al respecto? Cualquier forma de garantizar la alarma se dispara?

EDIT: Este problema está causado por «la batería de los ahorradores», agregó por diferentes fabricantes. Más info aquí: https://dontkillmyapp.com/

  • Sergio, tienes razón, yo tenía el mismo problema con un periódico semanal de alarma, que no funcionó. Yo era incapaz de hacer que funcione. Esta nueva tendencia va a matar a todos los cool apps en Android. Espero que los fabricantes se dan cuenta de que.
  • Los fabricantes de culpa apps para el consumo de energía, y se mantiene la comercialización de la Octa-cores que come más batería en comparación con la CPU con menos núcleos. ¿Piensan que simplemente la adición de un núcleo acelerarán sus teléfonos?
  • Así que… que no podemos usar AlarmManager con fiabilidad más?
  • Hola @SergioViudes ¿has probado GCM Administrador de Red? No estoy seguro de lo que se está utilizando la mañana, pero por favor, lea esto: developers.google.com/cloud-messaging/network-manager Esta es la aproximación más cercana para una migración de la JobSchedulers de la API.
  • Gracias @AviLevinshtein. Me gustaría hacer sin un servidor. Necesito que suene la alarma a la hora exacta, todos los días. El uso de GCM puede causar retrasos, o que el usuario no tenga conexión a Internet.
  • Hola @SergioViudes ,sólo por curiosidad, ¿estás tratando de establecer el SOY de un servicio se unen a la aplicación o con un proceso diferente?
  • Estoy ajustando el SOY de una Actividad
  • pues la actividad es destruido o los cambios de configuración es una mala práctica para habilitar la operación larga como gestor de alarmas en la parte superior de la misma. un servicio se orienta hacia la no ejecución de las tareas que se deben ejecutar en segundo plano. trate de leer acerca de un buen IntentService con AM de aplicación que se establece en primer lugar dentro de una actividad. Si quieres puedo escribir siempre un buen ejemplo a continuación. Sólo házmelo saber.
  • Tal vez no he entendido tu pregunta. Estoy creando las alarmas en mi actividad. Entonces, cuando la alarma se apaga, un broadcast receiver es ejecutado, y, finalmente, un WakefulIntentService (clase de @commonsware) es ejecutado.
  • A partir de una alarma fabricante a otro, por favor intente de nuevo mi respuesta a continuación, setAlarmClock().
  • Estoy teniendo el mismo problema exacto. ¿Finalmente arreglarlo? Estoy desesperado ya. Por qué entonces crear AlarmManager clase si usted no puede utilizar de forma fiable.
  • Todavía estoy buscando una solución. AlarmManager funciona a la perfección en los dispositivos con Android Vainilla. El problema es que los fabricantes están tratando de «mejorar» las características de Android, y rompieron AlarmManager… los Fabricantes no deberían implementar sus propios «de la batería de los ahorradores», si se utiliza el estándar Doze mode, AlarmManager iba a funcionar perfectamente… Sigue buscando una solución…
  • ¿Hay alguna solución? ¿Qué otras aplicaciones como recordatorios o algo que hacer? Tiene que haber otra opción que setAlarm, que es para las alarmas, no para recordatorios
  • Hey @Sergio Viudes, finalmente, ¿cómo se resuelve el problema? Hay muchas personas en el mundo android que sufren este problema….por favor, dile como te encontraste alguna solución para esto o no?
  • también soy de las que se enfrenta el mismo problema con Xiomi dispositivos para el seguimiento. y si sigo mi app de ahorro de batería restricción de su trabajo correctamente en 3 de los 4 dispositivos haciendo siguientes ajustes– –> Ir a la batería -> Potencia –> Aplicación de ahorro de batería –> tu aplicación Ahora seleccione Sin restricciones( para ajustes de Fondo), a continuación, Permitir la opción de ubicación en segundo plano
  • Gracias por tu comentario @ImranKhanSaifi, como lo que yo sé, esta es la única solución a este problema.
  • Tengo el mismo problema en Huawei, que acaba de matar a mi previsto Alarmas. Traté de poner mi app para la aplicación protegida y no ayuda. Esto no va a parar de la aplicación en sí, pero aún matar a mi previsto alarma que no se dispara. He intentado instalar muchas aplicaciones que, por ejemplo, el uso de alarmas para la actualización del widget y algunos de ellos están trabajando correctamente, también cuando no me los puso como protegida. Así que debe haber alguna razón por la que Huwei matar a mi alarmas pero no para otras aplicaciones.
  • tenía el mismo problema. Esta fue mi solución: stackoverflow.com/questions/52991241/…
  • Lo he probado con ninguna suerte 🙁
  • Hay un sitio web que explica cómo lidiar con este problema con diferentes fabricantes: dontkillmyapp.com

13 Comentarios

  1. 13

    Estoy tratando de resolver varias semanas ya. No he encontrado nada. Huawei acaba de matar a todas las alarmas después de algún tiempo. Si pongo la app para la aplicación protegida en su ahorro de batería que no ayuda. Pero Si puedo cambiar el nombre del paquete de mi app para contener palabras como despertador, reloj o el calendario, funciona absolutamente normal como en cualquier otro dispositivo. No entiendo cómo Google puede dar la certificación para esta mierda. Creo que los OEM no debe modificar el core de la plataforma de tal manera. Entiendo que ellos tienen su propio bateador protector de los que matan el app después de algún tiempo, cuando el usuario no lo uso. Pero esta matando a las alarmas de aplicaciones protegidas.

    También setAlarmClock() para la sincronización exacta de las alarmas de ayuda. Pero no es posible utilizar este para, piensa como widget de actualización.

    • Lo mismo que yo, yo también lo intente pero nada para resolver este problema en algunos de la marca Xiaomi, Oppo, Huawei. A veces matar procesos en segundo plano y de alarma para ahorrar batería.
    • Tengo huawei teléfono, el cambio de nombre de paquete para alarma/calendario no hace nada. Única manera de evitar esta añada su aplicación en aplicación protegida lista de phone manager
    • no importa si hay alarma o reloj o calendario o donald trump
  2. 8

    El problema es Inteligente de Manager. Samsung tiene un administrador de batería que a veces se desactiva ciertas aplicaciones se ejecuten en segundo plano. Se trató de «curriculum vitae», al volver a la aplicación, pero desactiva completamente la aplicación o puede reanudar cada 5 minutos o así (dependiendo de cómo Samsung tiene).

    Que esto iba a funcionar en stock versiones de android ya que no hay Administrador de Samsung. También puede instalar una versión personalizada de android que tiene algunas características para permitir SM (dependiendo de la rom).

    • Me estoy volviendo loco porque no tengo dispositivo de Samsung para probarlo. Sólo sé lo que los usuarios de mi aplicación me dice. ¿Sabe usted si el problema es que AlarmManager no está funcionando debido a que la aplicación se mató? O el problema es que el dispositivo no se puede despertar cuando la alarma se apaga debido a que el administrador?
    • Recientemente, una gran cantidad de empresas han puesto en práctica sus propias. Como LG tiene uno que funciona de forma similar a la de samsung, tal vez su teléfono tiene uno? El problema no es la alarma, la alarma de la aplicación es empujado a un estado donde se inactiva completamente. Inteligente de Manager piensa que es sólo un azar de la aplicación que usted no necesita. Me di cuenta de que ciertas aplicaciones puede conseguir más allá de ello, puede que algunas aplicaciones son aceptadas por el inteligente de manager.
    • Tengo un samsung para probar y puedo decirles que no hay mucho que usted puede obtener de él. Cuando la inteligente de manager optimiza su aplicación no hay ningún error ni nada, simplemente muere, similar a la de la fuerza de frenado. Todavía en la lista de aplicaciones recientes, aunque
    • Gracias Tim. Sería genial para solucionar este problema sin tener que excluir aplicaciones de «Inteligente» y el Administrador.
    • dispositivos como xiaomi(miui), vivo y htc conjunto un montón de permisos como false de forma predeterminada, a menos que sea una aplicación en la lista de «confianza» de las aplicaciones que parecen determinar por sí mismos(whatsapp,truecaller,etc, son de confianza por defecto). Esto se está convirtiendo en un codificadores pesadilla
  3. 2

    La mayoría de los modernos dispositivos Android vienen con una aplicación o un mecanismo, que automágicamente intenta averiguar cómo ahorrar batería y, como resultado, podría matar a ciertas 3 ª parte aplicaciones. Esto podría resultar en la eliminación de tareas programadas y puestos de trabajo (por ejemplo, alarmas no se iba, notificaciones push no funcionan, etc.). En muchos casos esto sucede completamente independiente de ahorro de batería mecanismos de Android, en mi caso yo no podía hacer más batería de optimización cuando detecto algunos dispositivos de modelo, me redirigir usuario a la puesta en marcha del administrador de lista blanca de mi aplicación

    Usted se encuentra en este enlace para cada modelo con la intención de que se debe invocar
    https://android-arsenal.com/details/1/6771

  4. 2

    Uso AlarmManager para <5.0 dispositivos, y JobScheduler para 5.0+ dispositivos. Yo no puedo decir con seguridad que JobScheduler no se verá afectada por el fabricante de las travesuras, pero parece mucho menos probable para mí, dado que Android está tratando de mover a la gente lejos de AlarmManager y en JobScheduler.

    EDICIÓN: Google ha salido con una primera parte en la solución a este problema se le llama WorkManager. Abstrae múltiples marcos de programación y utiliza la más adecuada para el dispositivo.

    • Desafortunadamente, a diferencia de la AlarmManager de la clase, el tiempo no es exacto cuando se utiliza JobScheduler. En mi aplicación, el momento debe ser exacta 🙁
    • Me dio una oportunidad y algunos optimizators (samsung, al menos) matar a todas las tareas pendientes en JobScheduler cuando la pantalla se apaga. Así también roto. Esto sucede sobre 5.0. Después de actualizar a 6.0 funciona bien, supongo que fijo que. No pude probarlo con otros fabricantes todavía.
    • Para el momento exacto que usted puede utilizar un servicio en segundo plano o en servicio regular. Usted puede tratar de un primer plano de servicio, pero esto creará una notificación persistente para el usuario (probablemente no deseado) y algunos teléfonos tienen la tarea de asesinos integrado que automáticamente va a destruir el primer plano de servicio. WorkManager es la mejor solución, pero por desgracia no le dará los tiempos exactos.
  5. 1

    Estás escuchando para BOOT_COMPLETED? Usted necesita para ajustar las alarmas de nuevo cuando el dispositivo se reinicia.

    • Sí. Como ya he dicho, las alarmas estaban trabajando desde el año 2012, hasta ahora. Cuando el dispositivo se reinicia me re-programar alarmas en BOOT_COMPLETED de difusión receptor.
    • Que requiere un reinicio para que tu aplicación funcione de nuevo no es ni la mitad de una solución
    • eso no es en absoluto lo que yo estoy diciendo. SI se reinicia el dispositivo, todas las alarmas conjunto con el gestor de alarmas se debe configurar de nuevo.
    • sí, pero que se reinicie el dispositivo no está relacionado con el problema en esta pregunta
  6. 1

    También tengo una aplicación que establezca alarmas.La solución es utilizar AlarmManager.setAlarmClock() en api >= 21. Esta no se ve afectada por doze afaik y tiene la ventaja añadida de poner un reloj de alarma icono en la bandeja del sistema.

    • Gracias por tu respuesta. Hay alguna forma de quitar el reloj de alarma icono?
    • No lo creo 🙁
  7. 0

    la mayoría de los nuevos teléfonos de hoy en día se combinan con algún tipo de batería ahorro de energía/administrador que hacer lo mismo que usted describe. no contar duboosters limpia y maestros.

    Creo que usted necesita para poner un descargo de responsabilidad o de preguntas frecuentes en su aplicación /juego de la lista de la tienda diciendo que esta aplicación necesita ser puesta a excepción de la batería con el administrador de la aplicación para funcionar correctamente.

    • Debe haber otra manera de hacerlo… los Usuarios no lee la exención de responsabilidad. No puedo pensar que los teléfonos Samsung no permitir que las aplicaciones de uso AlarmManager…
    • Las alarmas no de fuego «en el tiempo», sino que eventuially
    • Esto es (por desgracia) la mayoría de responder de manera útil, diría yo. Me gustaría que hubiera una solución mejor, pero los fabricantes de hardware están dañando a la perfección el trabajo de vainilla Android.
  8. 0

    La versión de Android que son estos dispositivos que ejecutan?

    A partir de la API 23, el propio sistema operativo entrará en un modo de baja energía en modo de reposo cuando se deje de usar por un tiempo, y en el que el modo de alarmas no será entregado. Hay una forma para que las aplicaciones explícitamente decir «necesito esta alarma para que suene en ese momento, independientemente de uso de la batería,» sin embargo, el nuevo AlarmManager métodos llamados setAndAllowWhileIdle() y setExactAndAllowWhileIdle().

    A partir de su descripción parece que esto podría no ser la causa de sus problemas en ciertos OEMs de dispositivos, pero esto es algo que todos los desarrolladores que utilizan el Gestor de Alarmas debe ser consciente de.

    Por último, muchos de los usos de la Alarma Gerente de la mejor forma de abordar mediante el Trabajo del Planificador mecanismos. Para la compatibilidad hacia atrás de la Play Services «GCM Administrador de Red», es en realidad muy de cerca el Trabajo de Programador en la funcionalidad — usa el Planificador de Trabajo internamente en las versiones más recientes de Android-y no es necesariamente acerca de las redes, a pesar de la clase del nombre.

    • Dispositivos de Samsung con Smart Manager se ejecuta Lollipop. Ya estoy utilizando setExactAndAllowWhileIdle de Malvavisco de los dispositivos. Voy a echar un vistazo a JobScheduler y GCM. De todos modos, no sé si el problema es que la alarma no se apaga, o si el dispositivo no se despiertan cuando la alarma se apaga.
  9. 0

    No creo que matar a la aplicación va a impedir que el gestor de alarmas desde la vigilia de su aplicación.

    Su sólo cuando «forzar detención» o deshabilitar la aplicación no recibe la devolución de llamadas de alarma de administrador.

    La raíz de la causa podría ser algo más.

    También en M… setExactAndAllowWhileIdle hace limitación…que si u programar una alarma cada 2 minutos no se activará. ..No debe ser de 15 minutos de la ventana. .

    • Gracias por tu respuesta. Pero, si no, ¿por qué la app funciona a la perfección cuando «optimización de la batería» está deshabilitado en Inteligente de Manager?
    • se ejecuta la aplicación en el dispositivo de raíces..si si, el administrador de la aplicación puede deshabilitar la aplicación también..
    • No, no estoy ejecutando en un dispositivo de raíces.
    • es que si u programar una alarma cada 2 minutos no se activará. ..No debe ser de 15 minutos de la ventana.» esto no es completamente cierto, es un problema real, si era cierto. Usted puede leer exactamente lo que el límite de tiempo para la programación dentro del Android de google Docs para setExactAndAllowWhileIdle método. Hay restricciones sobre la frecuencia con la que estas alarmas se va a ir para una aplicación en particular. Bajo condiciones normales de operación del sistema, no va a distribuir las alarmas más de cada minuto, cuando en la baja potencia de inactividad de los modos de esta duración puede ser significativamente mayor a 15 minutos.
  10. 0

    Para Xiaomi deberá habilitar el inicio automático de la aplicación. Estoy tratando de hacer una lista de Android modificaciones(generalmente de teléfono del fabricante) que pueden afectar a un proceso en segundo plano. Si usted tiene algo nuevo por favor agregar aquí una respuesta Lista de Android task killers

  11. 0

    Necesitamos activar nuestra aplicación en autostart manager en el gestor de aplicaciones, algunos teléfonos como vivo v5,

    En vivo v5, podemos encontrar este menú en iManager–>Administrador de la Aplicación–> Inicio Automático de Administrador. Habilitar nuestra aplicación aquí.

    A continuación, su alarma/alarmmanager se activará una alarma si la aplicación es asesinado o cerrado.

  12. 0

    Yo estábamos buscando una respuesta y después de varias horas me encontré con esto:

    https://stackoverflow.com/a/35220476/3174791

    En el curriculum vitae es la forma de saber si su aplicación fue asesinado por ‘Protegido apps’ y esto sólo funciona en dispositivos Huawei. déjeme saber si hay alguna solución para otros dispositivos (Samsung,Sony,Xiaomi, etc).

  13. -1

    dejé de usar AlarmManager hace un tiempo… un mejor y más estable alternativa

    1. crear un servicio de
    2. registrar un BroadcastReceiver para BOOT_COMPLETED
    3. fuego a su servicio desde el receptor
    4. iniciar un nuevo Controlador en el interior de su servicio de bucle para cada X minutos (Android – ejecución de un método periódicamente a través de postDelayed() la llamada)
    5. comprobar si el tiempo para ejecutar la tarea que ha de venir: ahora el tiempo de ejecución > 0 (Cómo encontrar la duración de la diferencia entre dos fechas en java?)
    6. si es así.. ejecutar la tarea y dejar que el controlador

    sí.. es un dolor..pero el trabajo de hacer NO IMPORTA LO que

    • Gracias por tu sugerencia, pero me gustaría evitar ese enfoque, porque el uso de AlarmManager no consumen memoria RAM o cualquier otro recurso. Y, si su aplicación es asesinado, el servicio iba a parar, ¿verdad?
    • yo no digo que este enfoque es BOOLETPROOF, pero al menos es consisten en diferentes versiones de api 🙂
    • Para trabajar de forma fiable esta solución, probablemente se necesitará también el uso de wake bloqueos y que iba a comer grandes cantidades de batería.
    • supongo que estás en lo cierto en esta.. la única pregunta es: ¿cuál sería el peor de los poco fiables código o mal desempeño? de todos modos, yo personalmente creo que hay formas alternativas de bloqueo que puede ser adecuado en algunos casos (por ejemplo: stackoverflow.com/questions/5346694/…)

Dejar respuesta

Please enter your comment!
Please enter your name here