我试图在android中每秒钟向stdout写一条消息给出一个给定的按钮(我打算稍后在那里放置一个方法)。我在标准的onTouch方法中使用switch来检测按钮按下:
CloudKit
全球两个全球布尔人:
protected void setFab(FloatingActionButton fab) {
fab.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN: {
System.out.println("Button pressed");
handleButtonDown();
return true;
}
case MotionEvent.ACTION_UP: {
System.out.println("Button released");
handleButtonUp();
return true;
}
default:
return true;
}
}
});
}
释放按钮时停止循环:
private boolean captureThreadRunning = false;
private boolean cancelCaptureThread = false;
然而,当我启动工作线程时,它会陷入无限循环,即使释放按钮,因此应该更改全局布尔值:
public void handleButtonUp() {
cancelCaptureThread = true;
}
不仅如此,UI也被冻结了,这肯定不应该,因为我在一个单独的线程中做了所有事情。当我释放按钮时,循环应该停止,因为布尔值会发生变化。 我对线程和android都很陌生,所以我想我只是缺少一些东西。
答案 0 :(得分:0)
但您确实在主线程中执行代码。请注意,您正在呼叫
thread.run();
因此您的执行路径进入无限循环。将其更改为
thread.start();
这将开始新的Thread