Milisegundos de Android

Así que estoy tratando de escribir una aplicación cronómetro que muestra el tiempo en milisegundos, pero por alguna razón no funcionará. Básicamente tengo un botón de conmutación que, después de ser presionado, comienza a imprimir los milisegundos desde la hora de inicio hasta la hora actual … En el simulador, sin embargo, la aplicación se bloquea. ¿Qué sucede?

public class testing extends Activity { /** Called when the activity is first created. */ Button start,stop; long init,now,time; TextView display; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.test); display = (TextView) findViewById(R.id.chronometer1); final ToggleButton passTog = (ToggleButton) findViewById(R.id.onoff); passTog.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { init=System.currentTimeMillis(); while(passTog.isChecked()) { now=System.currentTimeMillis(); time=now-init; display.setText("t: " + time); } } }); } 

}

Definitivamente no debería ejecutar un bucle de ocupado como lo está haciendo dentro del OnClickListener. Es por eso que la aplicación se bloquea. Usted necesita dejar que el resto del sistema tenga su opinión. Además, no tiene sentido actualizar la pantalla más de una vez cada 30 milisegundos más o menos, ya que es el más rápido que el ojo humano puede rastrear. Además, es posible que desee suspender el temporizador cuando la actividad está en pausa. Aquí hay una versión que hace todo eso:

 public class testing extends Activity { /** Called when the activity is first created. */ Button start,stop; long init,now,time,paused; TextView display; Handler handler; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); handler = new Handler(); setContentView(R.layout.test); display = (TextView) findViewById(R.id.chronometer1); final ToggleButton passTog = (ToggleButton) findViewById(R.id.onoff); final Runnable updater = new Runnable() { @Override public void run() { if (passTog.isChecked()) { now=System.currentTimeMillis(); time=now-init; display.setText("t: " + time); handler.postDelayed(this, 30); } } }; passTog.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { init = System.currentTimeMillis(); handler.post(updater); } }); } @Override protected void onPause() { super.onPause(); paused = System.currentTimeMillis(); } @Override protected void onResume() { super.onResume(); init += System.currentTimeMillis() - paused; } } 

¿Usted puso el método del setText() en su onClick() , así que usted chascará el botón cada segundo? ¡Ni siquiera es un hilo! Pruebe el método onTick() de la clase CountDownTimer lugar.

  • Android - los cálculos con el tiempo transcurrido en el cronómetro
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.