Android 虽然循环在线程中运行,但它阻止了主gui

Android 虽然循环在线程中运行,但它阻止了主gui,android,Android,为什么这段代码会阻塞while循环中的主UI new Thread(new Runnable() { public void run() { someButton.post(new Runnable() { public void run() { while (HintergrundDienst.laeuft) { //some delay co

为什么这段代码会阻塞while循环中的主UI

new Thread(new Runnable() {
    public void run() {
        someButton.post(new Runnable() {
            public void run() {
                while (HintergrundDienst.laeuft)
                {
                    //some delay code, like Thread.sleep
                }
                new Handler(Looper.getMainLooper()).post(new Runnable() {
                    @Override
                    public void run() {
                        //do on ui after HintergrundDienst.laeuft = false
                    }
                });
            }
        });
    }
}).start();
运行此命令将阻止主ui

为什么这段代码会阻塞while循环中的主UI

new Thread(new Runnable() {
    public void run() {
        someButton.post(new Runnable() {
            public void run() {
                while (HintergrundDienst.laeuft)
                {
                    //some delay code, like Thread.sleep
                }
                new Handler(Looper.getMainLooper()).post(new Runnable() {
                    @Override
                    public void run() {
                        //do on ui after HintergrundDienst.laeuft = false
                    }
                });
            }
        });
    }
}).start();
因为它在主应用程序线程上运行。您的循环位于一个
Runnable
中,该循环是提供给
post()
的。指示“runnable将在用户界面线程上运行”。这里,“用户界面线程”指的是主应用程序线程

为什么这段代码会阻塞while循环中的主UI

new Thread(new Runnable() {
    public void run() {
        someButton.post(new Runnable() {
            public void run() {
                while (HintergrundDienst.laeuft)
                {
                    //some delay code, like Thread.sleep
                }
                new Handler(Looper.getMainLooper()).post(new Runnable() {
                    @Override
                    public void run() {
                        //do on ui after HintergrundDienst.laeuft = false
                    }
                });
            }
        });
    }
}).start();
因为它在主应用程序线程上运行。您的循环位于一个
Runnable
中,该循环是提供给
post()
的。指示“runnable将在用户界面线程上运行”。这里,“用户界面线程”指的是主应用程序线程