Programación y Desarrollo para Android Subforo exclusivo para temas de programación de software para PDAs y desarrollo de aplicaciones, interfaces, etc bajo Android


 
Herramientas
  #1  
Viejo 07/05/12, 22:53:40
Avatar de zamudiofabian
zamudiofabian zamudiofabian no está en línea
Usuario novato en la web
Mensajes: 2
 
Fecha de registro: may 2012
Mensajes: 2
Modelo de smartphone: Samsung Galaxy S
Tu operador: Movistar
Mencionado: 0 comentarios
Tagged: 0 hilos
ejecutar while hasta apretar un boton

Quiero un programa bien facil para entender un punto fundamental en la programacion.

mi idea es tener 1 TextView que muestre numero del 1 al 10 hasta que aprete un Button

Luego de entender el funcionamiento de esto lo llevare a otros programas mas complejos .Gracias
Responder Con Cita


  #2  
Viejo 08/05/12, 01:17:49
Avatar de tompad28
tompad28 tompad28 no está en línea
Miembro del foro
Mensajes: 128
 
Fecha de registro: ago 2011
Mensajes: 128
Modelo de smartphone: Packard Bell Liberty Tab
Tu operador: Simyo
Mencionado: 0 comentarios
Tagged: 0 hilos
Para hacer esto, creo que lo más correcto es usar un AsyncTask.

Es necesario que primero entiendas a fondo lo que hace. Lo más importante en una aplicación android es no bloquear el hilo principal de la interfaz de usuario, porque si no bloquearás a su vez la interacción del usuario con tu aplicació. Si la quiere cerrar, no podrá, por poner un ejemplo.

La AsyncTask lo que hace es ejecutar parte del código en un hilo paralelo, en particular el que se ejecuta dentro del método doInBackground. Este método a su vez puede comunicarse siempre que quiera con otro (onProgressUpdate) mediante la llamada al método publishProgress.

Lo que yo haría:

en "doInBackground" crear algún delay para parar algo la ejecución (si no se va a modificar tan rápido que ni lo verás), y cuando pase ese delay llamar a publishProgress. Para hacer esto, créate un while con la condición "while (!isCanceled()), ahora te explico por qué.

en onProgressUpdate actualizas tu TextView y ya está.

En tu Activity tendrás el botón, que en el onclick tendrá que hacer: asyncTask.cancel(true). Esto hará que la próxima vez que el doInBackground pase por isCanceled(), le devuelva un true y se salga del bucle, finalizando la tarea, y detieniendo por tanto el incremento del textView.

La AsyncTask es una funcionalidad muy importante, y aprenderla te ayudará mucho. Todo código que pueda bloquear momentáneamente el flujo de ejecución va a suponer una pérdida de fluidez para el usuario, por lo que todo proceso costos debe ejecutarse en hilos separados, y AsyncTask facilita muchísimo la tarea.

Si tienes cualquier duda adicional mientras lo estés programando, pregunta.
Un saludo
Responder Con Cita
Gracias de parte de:
  #3  
Viejo 08/05/12, 16:48:10
Avatar de zamudiofabian
zamudiofabian zamudiofabian no está en línea
Usuario novato en la web
Mensajes: 2
 
Fecha de registro: may 2012
Mensajes: 2
Modelo de smartphone: Samsung Galaxy S
Tu operador: Movistar
Mencionado: 0 comentarios
Tagged: 0 hilos
entendi perfecto, ya me pongo a leer sobre el AsyncTask.

Muchas gracias
Responder Con Cita
  #4  
Viejo 08/05/12, 17:17:28
Avatar de Sopanda
Sopanda Sopanda no está en línea
Usuario muy activo
Mensajes: 613
 
Fecha de registro: abr 2009
Localización: Feldkirch (Austria)
Mensajes: 613
Modelo de smartphone: Galaxy Note
Tu operador: Pepephone
Mencionado: 0 comentarios
Tagged: 0 hilos
Estoy de acuerdo con Tompad28, lo mejor es hacer un hilo de ejecución paralelo que haga la faena y no bloquear la pantalla principal.
Responder Con Cita
  #5  
Viejo 09/05/12, 06:34:51
Avatar de zamudio
zamudio zamudio no está en línea
Usuario novato en la web
Mensajes: 10
 
Fecha de registro: ene 2012
Mensajes: 10
Tu operador: Movistar
Mencionado: 0 comentarios
Tagged: 0 hilos
Luego de ller bastante y hasta entender como usar (no del todo bien)

logr que me funcionara el TextView suma los numero.....

EDITO: el error que tuve fue de noob como lo dije me olvide de pasar View al onClick me funciona perfecto dejo el código por las dudas Muchas gracias a todos

Código:
package com.clase.asincronica;

import android.app.Activity;
import android.os.AsyncTask;
import android.os.Bundle;
import android.view.View;
import android.widget.TextView;

public class ClaseasincronicaActivity extends Activity {
	
	Secundario otro = new Secundario();
	TextView tv1;
	
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) 
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        tv1=(TextView)findViewById(R.id.tv);
        otro.execute();
    }
    
    public void onClick(View view)
    {
    	otro.cancel(true);
    }
    

    public class Secundario extends AsyncTask<Void, Integer, Void>
    {
    	int contador;
    	@Override
    	
    	protected void onPreExecute()
    	{
    		contador=0;
    	}
    	@Override
    	protected void onProgressUpdate(Integer... i)
    	{
    		tv1.setText(String.valueOf(contador));
    	}
    	
    	@Override
		protected Void doInBackground(Void... params) {
			while (!isCancelled())
    		{	
    			publishProgress(contador);
    			contador++;
    			try {
					Thread.sleep(500);
				} catch (InterruptedException e) {
					e.printStackTrace();
				}
    		}
    		
			return null;
		}
     }
    
}

Última edición por zamudio Día 09/05/12 a las 06:38:04
Responder Con Cita
Respuesta

Estás aquí
Regresar   HTCMania > Todo sobre Android > Programación y Desarrollo para Android


Reglas de Mensajes
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Las caritas están On
Código [IMG] está On
Código HTML está Off

Saltar a Foro



Hora actual: 16:06:57 (GMT +1)

Cookies settings
Powered by vBulletin™
Copyright © vBulletin Solutions, Inc. All rights reserved.
 
HTCMania: líderes desde el 2007