|
||
|
![]() |
![]() |
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
|
||||
|
||||
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 |
|
#2
|
||||
|
||||
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 ![]() |
Gracias de parte de: | ||
#3
|
||||
|
||||
entendi perfecto, ya me pongo a leer sobre el AsyncTask.
Muchas gracias |
#4
|
||||
|
||||
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. |
#5
|
||||
|
||||
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 ![]() 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. |
![]() |
![]() |
||||||
|