因此,我正在尝试编写一个秒表应用程序,以毫秒为单位显示时间,但由于某些原因,它不能工作。基本上,我只有一个togglebutton,按下后,开始打印从开始时间到当前时间的毫秒数……然而,在模拟器中,应用程序锁定了。怎么了?
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);
}
}
});
}}
发布于 2012-01-02 01:53:10
您绝对不应该像在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;
}
}发布于 2012-05-16 07:10:49
您将setText()方法放在onClick()中,那么您会每秒单击该按钮吗?它甚至不是一个线程!改为尝试CountDownTimer类的onTick()方法。
https://stackoverflow.com/questions/8694525
复制相似问题