使用java.util.Timer
试图使计时器每秒调用一个方法。我不明白为什么这个代码不起作用。代码取自我的activity_main.xml和MainActivity.java 主要活动:使用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
<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);
}
}