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

Respuesta
 
Herramientas
  #1  
Viejo 07/05/12, 22:53:40
Array

[xs_avatar]
zamudiofabian zamudiofabian no está en línea
Usuario novato en la web
 
Fecha de registro: may 2012
Mensajes: 2
Modelo de smartphone: Samsung Galaxy S
Tu operador: Movistar
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
Array

[xs_avatar]
tompad28 tompad28 no está en línea
Miembro del foro
 
Fecha de registro: ago 2011
Mensajes: 128
Modelo de smartphone: Packard Bell Liberty Tab
Tu operador: Simyo
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
Array

[xs_avatar]
zamudiofabian zamudiofabian no está en línea
Usuario novato en la web
 
Fecha de registro: may 2012
Mensajes: 2
Modelo de smartphone: Samsung Galaxy S
Tu operador: Movistar
entendi perfecto, ya me pongo a leer sobre el AsyncTask.

Muchas gracias
Responder Con Cita
  #4  
Viejo 08/05/12, 17:17:28
Array

[xs_avatar]
Sopanda Sopanda no está en línea
Usuario muy activo
 
Fecha de registro: abr 2009
Localización: Feldkirch (Austria)
Mensajes: 611
Modelo de smartphone: Galaxy Note
Tu operador: Pepephone
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.
__________________
Visitar mi blog sobre ANDROID.
bamboo5.blogspot.com
Buscar en GOOGLE PLAY mis apps gratuitas LENTILLAS WIDGET, EATTOOL y TRIPTOOL
COACHMANAGER para gestión de entrenadores.
Responder Con Cita
  #5  
Viejo 09/05/12, 06:34:51
Array

[xs_avatar]
zamudio zamudio no está en línea
Usuario novato en la web
 
Fecha de registro: ene 2012
Mensajes: 10
Tu operador: Movistar

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   Portal | Indice > Todo sobre Android > Programación y Desarrollo para Android



Hora actual: 18:46:27 (GMT +2)



User Alert System provided by Advanced User Tagging (Lite) - vBulletin Mods & Addons Copyright © 2025 DragonByte Technologies Ltd.

Contactar por correo / Contact by mail / 邮件联系 /