当按钮释放时,为什么工作线程卡在循环中?

时间:2016-04-08 16:57:20

标签: android multithreading infinite-loop ontouchevent ontouch

我试图在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都很陌生,所以我想我只是缺少一些东西。

1 个答案:

答案 0 :(得分:0)

但您确实在主线程中执行代码。请注意,您正在呼叫

thread.run();

因此您的执行路径进入无限循环。将其更改为

thread.start();

这将开始新的Thread