Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/188.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用java.util.Timer_Java_Android_Timer - Fatal编程技术网

使用java.util.Timer

使用java.util.Timer,java,android,timer,Java,Android,Timer,试图使计时器每秒调用一个方法。我不明白为什么这个代码不起作用。代码取自我的activity_main.xml和MainActivity.java 主要活动: <ToggleButton android:id="@+id/btnStartStop" android:layout_width="80dp" android:layout_height="50dp" android:layout_alignLeft="@+id/clockDisplay" a

试图使计时器每秒调用一个方法。我不明白为什么这个代码不起作用。代码取自我的activity_main.xml和MainActivity.java

主要活动:

<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" />

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

在Android上,使用处理器比使用Java计时器更好。操作系统可以更好地管理这一点,例如在活动生命周期期间

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);
    }

}

到底是什么不起作用?线程未启动?提供更多详细信息。试着使用ScheduledExecutorService,我会查出来的。同时。。。我运行应用程序,点击按钮,什么也不打印。这看起来像是C语言中的一个中断。我会尝试一下,让Log.d真正起作用。我正在努力使用handlerhandlers,但这不是答案,因为我试图每秒更新UI。无法从其他线程更新UI。若要更新UI,请从UI线程调用无参数处理程序构造函数。如果需要,您可以从任何线程向it发送消息。这是有效的,至少直到活动停止。是的,你是对的。。。只是把它弄得乱七八糟然后修好了!我只是一个困惑的初学者
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);
    }

}