Título: [Ayuda]Timer en Android Publicado por: PabloPbl en 12 Abril 2015, 05:41 am Pues cuando yo trabajaba en Java puro, recuerdo que usaba muchísimo la clase Timer la cual sirve para hacer correr procesos particulares o en diferentes hilos.
Pues ahora eso mismo me gustaría hacerlo en Android, me he fijado la Api de Android y si esta disponible la misma, solo que Android la ha cambiado bastante y lo encuentro un tanto complicado, nada que ver como lo hacia en Java. He buscado por la red y he encontrado bastante material, por ejemplo este y otros: http://stackoverflow.com/questions/4597690/android-timer-how (http://stackoverflow.com/questions/4597690/android-timer-how) Trato de entenderlo, pero me es complicado, ¿alguien me podría ayudar a entender un poco de esto? Se que hay otras formas como los Services, pero es demasiado para lo que requiero, necesito algo sencillo, por eso elige este, si alguien conoce alguna clase mejor, que la diga. Título: Re: [Ayuda]Timer en Android Publicado por: Usuario Invitado en 12 Abril 2015, 16:10 pm Utiliza Calendar de Java, que creo está disponible en el kit de Android. Es fácil de manejar.
Saludos. Título: Re: [Ayuda]Timer en Android Publicado por: PabloPbl en 12 Abril 2015, 16:59 pm Calendar sirve para hacer acciones en otro hilo?, tengo entendido que sirve para obtener la fecha y la hora, me acabo de fijar en la API de Android y pues si, esta ahí.
Salu2 Título: Re: [Ayuda]Timer en Android Publicado por: Usuario Invitado en 12 Abril 2015, 17:10 pm Ya veo, tu me hablas de concurrencia. ¿Existe alguna diferencia notoria entre Timer de Java y Android?
Es decir, en Android es tan diferente hacer ésto: Código
Código
Título: Re: [Ayuda]Timer en Android Publicado por: PabloPbl en 12 Abril 2015, 17:28 pm Haber si entiendo, estas creando una clase que hereda de TimerTask y sobrescribes su método run, que es el que se va a ejecutar cada cierto tiempo.
Y desde otra clase, creas un Timer: Código Y con esto especificas que acción se va a ejecutar cada cierto tiempo, la cual es la clase TimerTask y tiene 2 parámetros más, en el primero se especifica cuando iniciara, y el segundo especificas cada cuanto se va a ejecutar la acción. Código
En resumen este código mostraría Time's up! en pantalla cada 5 segundos? Título: Re: [Ayuda]Timer en Android Publicado por: Usuario Invitado en 12 Abril 2015, 18:18 pm Exactamente. El primer parámetro de schedule indica el timeout, es decir, la cuenta regresiva para que se inicie por primera véz la tarea, y el segundo parámetro el intérvalo entre ejecuciones. Ésto es ideal cuando se quiere mostrar avisos cada X tiempo, por ejemplo.
Un saludo. Título: Re: [Ayuda]Timer en Android Publicado por: PabloPbl en 12 Abril 2015, 19:18 pm Perfecto, muchas gracias Gus ;D, he hecho pruebas y funciona de maravilla, pero hasta cierto punto.
La primera prueba la hice de la siguiente manera: Código
Pues el código de arriba funciona perfecto, he utilizado un clase interna(sabia que alguna día me iba a ser útil) que extiende de TimerTask y sobreescribo el método run y pongo que se mostrara un Log en la consola. Todo esto se ejecutara desde el Timer, que lo cree en el método onCreate, le paso como parámetro una instancia de la clase interna "classProcess", iniciara en 1 segundo y se repetirá cada 5 segundos, esto lo hace de lujo. Pero cuando quiero, modificar el valor de un TextView cada cierto tiempo, en este caso cada segundo, me arroja un error en el emulador. El código lo he hecho de 2 formas, pero ninguna me anda. Antes de mostrar el código, quería comentarles lo que quiero hacer. Lo que quiero lograr es que un textView cambie su valor cada segundo, osea funciona como un temporizador. Por defecto le pongo un texto que dice 30 segundos, y bueno con la ayuda de Timer quiero hacer que el TextView vaya bajando cada segundo hasta llegar a 0 y ahí detenerse. Esta es la primera forma, he puesto un par de comentarios en el código para que se entienda más el mismo: Código En el código de arriba, creo que el error estaba en que: desde la clase interna quería acceder a las variables de clase que son privadas, de la clase principal, ustedes me dirán, ¿Por que no te diste cuenta de esto antes? pues es la primera vez que lo hago así, aparte el IDE no me arrojaba error, no me marcaba con lineas roja ni nada, y es por eso que he intentado también de esta forma: Código
Pues la diferencia entre el código que esta arriba y el que esta arriba de este de arriba(ya saben xD), es que la clase interna recibe parámetros en su constructor, recibe un TextView. Entonces en vez en vez de interactuar directamente con el TextView de la clase principal, interactuo con el TextView que recibo por parámetro de la clase principal, pero también me da error, y no se que puede ser. Si no entienden algo, díganmelo. Salu2 Título: Re: [Ayuda]Timer en Android Publicado por: PabloPbl en 12 Abril 2015, 22:08 pm android.view.ViewRootImpl$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views.
Ese error, creo que me esta diciendo que solo puedo modificar las Views(Elementos visuales) desde el Thread original y no desde otro Hilo. ¿Que alguien me diga si esto es cierto? Título: Re: [Ayuda]Timer en Android Publicado por: Usuario Invitado en 12 Abril 2015, 23:17 pm Así es. Tienes que obtener el thread en donde está corriendo el Activity. Intenta:
Código
El código anterior debe ir dentro del run de ClassProcess. Título: Re: [Ayuda]Timer en Android Publicado por: PabloPbl en 13 Abril 2015, 16:29 pm Pongo el código dentro del run de la clase interna, pero me da error en esta linea, creo que no reconoce el método getActivity()
Código También he intentado de esta forma, pero también me da error: Código Título: Re: [Ayuda]Timer en Android Publicado por: PabloPbl en 13 Abril 2015, 16:30 pm La clase interna me quedo de esta forma:
Código
Título: Re: [Ayuda]Timer en Android Publicado por: PabloPbl en 13 Abril 2015, 16:46 pm Gus eres grande, muchas gracias por toda la ayuda ;D.
Puse el mismo código, pero sin poner el método getActivity() y funciona de maravilla la App, osea el code me quedo algo así: Código
Saludos crack!!! Título: Re: [Ayuda]Timer en Android Publicado por: Usuario Invitado en 13 Abril 2015, 17:48 pm getActivity(), te devuelve la actividad. También bastaría con Prueba.this. Intenta hacerlo con un callback en lugar de una clase:
Código
Saludos. PD: Ya vi que lo solucionaste xD. Título: Re: [Ayuda]Timer en Android Publicado por: PabloPbl en 13 Abril 2015, 19:09 pm Call back? nunca había oído de eso. He mirado el código que me haz pasado y hay cosas que nunca había visto, por lo que veo cuando tu haces:
Código Como primer parámetro le estas pasando un nuevo objeto, pero como se yo que se va a ejecutar este código: Código
Jajaja xDDD, justo me acabo de dar cuenta de algo, capaz que lo que haz querido hacer, es esto: Código En vez de pasarle un nuevo objeto, le pasamos el que creamos anteriormente. Creo que es mas fácil hacerlo así no? PD: Acabo de leer el principio de este mensaje y me mato xDDD Título: Re: [Ayuda]Timer en Android Publicado por: Usuario Invitado en 13 Abril 2015, 19:49 pm Sí, debes pasarle el objeto que está como propiedad y que se ha inicializado en el método initializeTimerTask(), lo que pasa es que en la edición olvidé cambiar eso xD.
Saludos. Título: Re: [Ayuda]Timer en Android Publicado por: PabloPbl en 13 Abril 2015, 21:38 pm Ahora si tiene mas sentido jaja.
Gracias y un Saludo!! |