【问题标题】:Using java.util.Timer使用 java.util.Timer
【发布时间】:2014-03-01 20:57:32
【问题描述】:

试图让计时器每秒调用一个方法。我无法弄清楚为什么这段代码不起作用。代码取自我的 activity_main.xml 和 MainActivity.java

activity_main:

<ToggleButton
    android:id="@+id/btnStartStop"
    android:layout_width="80dp"
    android:layout_height="50dp"
    android:layout_alignLeft="@+id/clockDisplay"
    android:layout_below="@+id/clockDisplay"
    android:layout_marginLeft="40dp"
    android:layout_marginTop="0dp"
    android:textOff="Start"
    android:textOn="Stop"
    android:onClick="toggleStartStop" />

MainActivity.java:

public void toggleStartStop(View view){
        if(((ToggleButton) view).isChecked()){
            Timer timer = new Timer("timer", true);
            TimerTask task = new startTask();
            timer.schedule(task, new Date(), 1000);
        }else{
            stopTimer();
        }
    }

class startTask extends TimerTask 
{
    public void run() 
    {
        System.out.println("inc secs var");
    }
}

【问题讨论】:

  • 究竟是什么不工作?线程没有启动?提供更多详细信息。
  • 尝试改用ScheduledExecutorService
  • 我会检查的。与此同时...我运行应用程序,单击按钮,没有打印任何内容。

标签: java android timer


【解决方案1】:

对于调试,使用断点或Log.d() 调用来查看计时器设置代码是否正在运行。一般情况下,使用Log.d() 也比使用println() 更好。

在 Android 上,send a message to a Handler 比使用 Java 计时器更好。操作系统可以更好地管理这一点,例如在 Activity 生命周期中。

class UpdateHandler extends Handler {
    private static final int MSG_UPDATE = 1;
    private static final long UPDATE_INTERVAL = 1000; // msec

    @Override
    public void handleMessage(Message msg) {
        super.handleMessage(msg);
        switch (msg.what) {
            case MSG_UPDATE:
                // do stuff...
                scheduleNextUpdate();
                break;
        }
    }

    void scheduleNextUpdate() {
        sendEmptyMessageDelayed(MSG_UPDATE, UPDATE_INTERVAL);
    }

}

【讨论】:

  • 这看起来几乎像 C 中的中断。我会尽快尝试
  • Log.d 确实有效。我正在使用处理程序
  • 处理程序不是答案,因为我试图每秒更新 UI。 (无法从其他线程更新 UI)。
  • 为了能够更新 UI,请从 UI 线程调用无参数的 Handler() 构造函数。如果需要,您可以从任何线程向它发送消息。这至少在 Activity 停止之前有效。
  • 是的,你是对的......只是在搞乱它并修复它!我只是一个迷茫的初学者
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-29
  • 2011-01-13
  • 1970-01-01
  • 1970-01-01
  • 2013-01-05
相关资源
最近更新 更多