Вы определенно не должны запускать занятый цикл, как вы делаете внутри OnClickListener.Вот почему приложение блокируется.Вы должны позволить остальной системе сказать свое слово.Кроме того, не имеет смысла обновлять дисплей чаще, чем раз в 30 миллисекунд или около того, потому что это самый быстрый способ, который может отслеживать человеческий глаз.Кроме того, вы можете приостановить таймер, когда активность приостановлена.Вот версия, которая делает все это:
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;
}
}