首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Android毫秒

Android毫秒
EN

Stack Overflow用户
提问于 2012-01-02 01:50:21
回答 2查看 12.4K关注 0票数 3

因此,我正在尝试编写一个秒表应用程序,以毫秒为单位显示时间,但由于某些原因,它不能工作。基本上,我只有一个togglebutton,按下后,开始打印从开始时间到当前时间的毫秒数……然而,在模拟器中,应用程序锁定了。怎么了?

代码语言:javascript
复制
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);
            }

        }
    });
}

}

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-01-02 01:53:10

您绝对不应该像在OnClickListener中那样运行繁忙的循环。这就是应用程序锁定的原因。你需要让系统的其余部分有自己的发言权。此外,每30毫秒左右更新一次显示器也没有意义,因为这大约是人眼所能跟踪的最快速度。此外,当活动暂停时,您可能希望暂停计时器。这是一个可以做到这一切的版本:

代码语言:javascript
复制
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;
    }
}
票数 8
EN

Stack Overflow用户

发布于 2012-05-16 07:10:49

您将setText()方法放在onClick()中,那么您会每秒单击该按钮吗?它甚至不是一个线程!改为尝试CountDownTimer类的onTick()方法。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8694525

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档