he llegado al punto en el que estoy a pocos pasos de la calvicie ...servicio de Android se detiene
Estoy intentando ejecutar un servicio que va a comprobar si los servidores en mi trabajo están ejecutando . Se supone que debe hacer esto cada 5 minutos.
He pasado por TimerTask, ScheduledExecutorService y finalmente Handler. Todos funcionan "bien" durante unas horas, a excepción de algunas inexactitudes, 1-5 minutos de inactividad, y de repente el "temporizador" simplemente deja de disparar.
Ahora, he leído que el Programador se detendrá si encuentra una excepción no detectada, y estoy seguro de que así es también con el TimerTask - Pero verificando los archivos de registro, no hay excepciones en absoluto ...
Cuando llegué a casa del trabajo hoy, decidí hacer un experimento con Handler.
Creé 2 controladores, uno correría el código para verificar los servidores e incrementaría uno int a la vez. El otro simplemente registraría el valor de dicha int, para no detenerse, si encontrara una excepción (aunque no puedo ver cómo sería).
Se ejecuta muy bien, con el 1-5 minutos habitual inexactitud, por unas horas y luego se detiene, a continuación es las últimas líneas del registro:
02-07 20:03:25.892 D/dalvikvm( 992): GC_EXPLICIT freed 192K, 53% free 4295K/9031K, external 3755K/4825K, paused 114ms
02-07 20:03:35.572 D/dalvikvm(5472): GC_EXPLICIT freed <1K, 54% free 2895K/6279K, external 2002K/2137K, paused 61ms
02-07 20:04:42.212 V/ServerChecker(12568): Timer triggered
02-07 20:04:42.212 V/ServerChecker(12568): Checking: linux15
02-07 20:04:44.152 V/ServerChecker(12568): Checked: linux15
02-07 20:04:44.152 V/ServerChecker(12568): Checking: linux1
02-07 20:04:44.462 V/ServerChecker(12568): Checked: linux1
02-07 20:04:44.462 V/ServerChecker(12568): Checking: linux12
02-07 20:04:44.762 V/ServerChecker(12568): Checked: linux12
02-07 20:04:44.762 V/ServerChecker(12568): Checking: linux9
02-07 20:04:45.072 V/ServerChecker(12568): Checked: linux9
02-07 20:04:45.072 V/ServerChecker(12568): Checking: linux14
02-07 20:04:45.382 V/ServerChecker(12568): Checked: linux14
02-07 20:04:45.382 V/ServerChecker(12568): Test timer triggered: 13
02-07 20:05:01.002 E/InputDispatcher( 223): channel '406cefc8 com.n04dev.serverchecker/com.n04dev.serverchecker.ServerChecker (server)' ~ Consumer closed input channel or an error occurred. events=0x8
02-07 20:05:01.002 E/InputDispatcher( 223): channel '406cefc8 com.n04dev.serverchecker/com.n04dev.serverchecker.ServerChecker (server)' ~ Channel is unrecoverably broken and will be disposed!
02-07 20:05:08.932 D/dalvikvm(12842): GC_EXPLICIT freed 73K, 51% free 2641K/5379K, external 2002K/2137K, paused 37ms
02-07 20:05:09.132 D/dalvikvm( 185): GC_EXPLICIT freed 11K, 53% free 2554K/5379K, external 2002K/2137K, paused 96ms
02-07 20:05:12.022 D/dalvikvm( 185): GC_EXPLICIT freed <1K, 53% free 2554K/5379K, external 2002K/2137K, paused 164ms
02-07 20:05:12.062 D/dalvikvm( 185): GC_EXPLICIT freed <1K, 53% free 2554K/5379K, external 2002K/2137K, paused 36ms
02-07 20:05:18.612 D/dalvikvm(12852): GC_EXPLICIT freed 59K, 52% free 2596K/5379K, external 2002K/2137K, paused 72ms
He mirado los dos últimos mensajes sobre mi aplicación y encontré this thread - Pero no veo cómo se aplicaría en mi caso.
Realmente espero que ustedes tengan alguna idea de lo que estoy haciendo mal. Lo he estado haciendo durante semanas. Probé diferentes temporizadores, tuve un temporizador tratando de atrapar el temporizador "principal" parando y luego reiniciándolo, pero sin suerte, y como muestra mi último experimento, no parece ser un problema con el temporizador ... creo ...
Sí, el término "servicio" en el sistema operativo Android no se parece en nada a un servicio de Windows, que se ejecuta en segundo plano para siempre: un servicio de Android es simplemente una aplicación que no tiene front-end, y por lo tanto está sujeto a estándares gestión/limpieza de memoria. La alarma que llama un intento es definitivamente el camino a seguir. –
Muchas gracias Mark, el truco funcionó: ahora ha estado funcionando sin parar durante 9 horas, disparando en la marca exacta de 5 minutos :) - Y gracias Guy por esa explicación – noir04
Estoy enfrentando el mismo problema, sin embargo, nunca se me ocurrió que podría estar relacionado con nuestro Servicio ... Tenemos un Servicio que se ejecuta, y luego Thread.sleeps, se despierta después de un tiempo, etc. ... Me pregunto si esto podría estar relacionado, porque estoy obteniendo el mismo error. – AgentKnopf