PDA

Ver la Versión Completa : Problema con hilo en segundo plano


frank1986
13/10/11, 16:08:42
Hola,

¿Qué tal? Veréis tengo un problema, os cuento. Estoy realizando una aplicación en la que, una de las partes, es que se envíe un email en segundo plano con la app minimizada. Estoy utilizando un hilo y todo funciona perfectamente, pero el problema viene en que si el teléfono está bloqueado, el hilo también se bloquea y no hace nada, sólo funciona si el usuario tiene el teléfono desbloqueado y claramente, con la app en segundo plano, pero como ya os digo, si el teléfono está bloqueado, no funciona, no da ningún error, sólo que no hace lo que tiene que hacer, es como si se pausara todo.
¿Cómo lo tendría que hacer? Os pongo cómo tengo echo el hilo:


Ésto es lo que tengo en el onCreate de la aplicación, en el que la función mi_funcion() se ejecuta cada 1 minuto y 30 segundos:


final Handler handler = new Handler();
Timer t = new Timer();
t.scheduleAtFixedRate(new TimerTask() {
public void run() {
handler.post(new Runnable() {
public void run() {
mi_funcion();
}
});
}
}, 3000, 1*60*1000+30*1000); //1 minuto y medio


¿Qué es lo que hago mál o cómo lo hago?

MaGaRCaN
13/10/11, 17:05:41
¿No sería mejor crear un servicio en lugar de un hilo?

frank1986
13/10/11, 20:46:36
Es que ya lo cambie una vez por un servicio y pasaba exactamente igual, al ostar bloqueado no hacia nada .... ¿cómo tendria que crearlo?

frank1986
14/10/11, 14:04:58
Nada, que no hay manera, ni con wakelock ni como servicio ni nada ..... Pues nada, no se que hacer .... Tengo el programa terminado y sólo me falta eso, y está muy bien la app, además porque no he visto ninguna que haga lo mismo !!! Pero nada ..... joer

frank1986
17/10/11, 11:50:02
Lo he cambiado a servicio, y dentro de éste un TimeTask para hacer lo que quiero. Además he añadido en el onCreate principal un WakeLock del tipo PARTIAL_WAKE_LOCK pero pasa lo mismo, al bloquear el teléfono éste se pausa también ...

¿Cómo lo consiguen WhatsApp y demás aplicaciones?

kamarilla
20/10/11, 00:24:54
Buenas:

ese mismo problema tenia yo con una de mis aplicaciones.

Te doy la explicación de porque es y la solución:

Explicación(sencilla y casera XD):

Cuando un dispositivo android se bloque entra en reposo y los procesos son pausados hasta que el móvil se vuelve a desbloquear, por eso te pasa ese problema.

Solucion:

Forzar que el movil no entre en modo reposo.
-Pros: Tu programa funcionara
-Contras: Come mas bateria.
-Consejo: utiliza el codigo abajo dado para que tu coreo se envie y una vez enviado vuelve a dejar el control de energia en modo. Es decir, haz un adquide() y luego cuando acabes haz un release().


Te recomiendo que te pases por la seccion de power manager del android developers para mas información:

http://developer.android.com/reference/android/os/PowerManager.html

codigo:

PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
PowerManager.WakeLock wl = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "Tiempo");

wl.acquire();
wl.release();

Espero haberte sido de ayuda, cualquier cosa escríbeme aquí o un privado ;)

Edito: Por cierto, si no es totalmente necesario intenta no utilizar esto, es posible que notes un consumo excesivo de batería Yo no encontré otra solución para mi problema y busque mucho ;)