Android, creando un hilo sencillo que actualizará mi contador de segundos

Básicamente, estoy tratando de ejecutar un contador segundos y un contador de niveles. Por cada 10 segundos quiero nivelar ++.
Pero eso no está implementado hasta ahora, hasta ahora sólo estoy tratando de obtener los segundos para mostrar, pero estoy recibiendo excepciones de tiempo de ejecución y un accidente.
Googling Veo que es porque estoy tratando de actualizar la interfaz de usuario de mi hilo y eso no está permitido. Así que supongo que voy a necesitar asyncTask, pero no tengo ni idea de cómo hacerlo con mi pequeño programa simple. Por favor ayude o déme algunas alternativas …

package com.ryan1; import android.app.Activity; import android.os.Bundle; import android.util.Log; import android.widget.TextView; public class main extends Activity { int level = 1; int seconds_running=0; TextView the_seconds; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); the_seconds = (TextView) findViewById(R.id.textview_seconds); Thread thread1 = new Thread(){ public void run(){ try { sleep(1000); Log.d("RYAN", " RYAN "); updated_secs(); } catch (Exception e) { e.printStackTrace(); Log.d("RYAN", " "+e); } } }; thread1.start(); } public void updated_secs(){ seconds_running++; the_seconds.setText(" "+seconds_running); } } 

Crear un controlador en el hilo de interfaz de usuario, a continuación, en el subproceso de trabajo enviar un mensaje al controlador (Handler.sendMessage (…)).

El mensaje se procesará en el hilo de la interfaz de usuario, por lo que puede actualizar el widget de texto correctamente. Me gusta esto:

 private Handler myUIHandler = new Handler() { @Override public void handleMessage(Message msg) { if (msg.what == some_id_you_created) { //Update UI here... } } }; Then in your thread, to send a message to the handler you do this: Message theMessage = myHandler.obtainMessage(some_id_you_created); myUIHandler.sendMessage(theMessage);//Sends the message to the UI handler. 

Para este tipo de cosas, es un desperdicio usar otro hilo; Es sólo un desperdicio y lo hace así que tienes que dael con multithreading problemas. En su lugar, sólo utilice Handler.sendDelayedMessage ():

 static final int MSG_DO_IT = 1; static final long TIME_BETWEEN_MESSAGES = 10 * 1000; // 10 seconds Handler mHandler = new Handler() { @Override public void handleMessage(Message msg) { switch (msg.what) { case MSG_DO_IT: { // Update your UI here... Message newMsg = obtainMessage(MSG_DO_IT); sendMessageDelayed(newMsg, TIME_BETWEEN_MESSAGES); } break; } } } @Override void onResume() { super.onResume(); // Start the timer, executing first event immediately. Message newMsg = mHandler.obtainMessage(MSG_DO_IT); mHandler.sendMessage(newMsg); } @Override void onPause() { super.onPause(); // Stop the timer. mHandler.removeMessages(MSG_DO_IT); } 

Tenga en cuenta que esta implementación tendrá algún tipo de deriva: el tiempo real entre los mensajes es TIME_BETWEEN_MESSAGES + (tiempo para enviar el mensaje). Si necesita algo que no se desvíe, puede hacer el tiempo usted mismo usando Hander.sendMessageAtTime () e incrementar la nueva hora con un valor constante cada vez, comenzando con una hora inicial que obtiene con SystemClock.uptimeMillis () en onResume ().

Hay un gran ejemplo de un temporizador construido utilizando AsyncTask y un controlador con el método postDelayed.

Está correcto que la actualización de la interfaz de usuario de un fondo es un no-no.

  • ¿Es apropiado SQL o acceso general a archivos en el hilo principal de la interfaz de usuario de Android?
  • No se puede crear el controlador dentro de hilo que no ha llamado Looper.prepare () 3
  • Android - llamando al hilo de ui del hilo de trabajo
  • Admob: Cómo cargar AdRequest fuera de UI Thread?
  • ¿Cómo ejecutar algún código en el asíncrono de la interfaz de usuario de Android?
  • Android - SQLite ContentResolver insertar / eliminar / actualizar en UI Thread?
  • No se puede crear el controlador dentro de hilo que no ha llamado Looper.prepare ()
  • Diferencia entre Handler.post (Runnable r) y Activity.runOnUiThread (Runnable r)
  • Cómo utilizar runOnUiThread
  • Manejar, quiero correr periódicamente
  • ¿Es una buena práctica crear AsyncTask anónima para paralelo pequeño proceso de congelación conocido?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.