睡在线程中而不会导致runOnUiThread进入睡眠状态

时间:2014-02-26 09:08:34

标签: java android multithreading thread-sleep

我在我的android应用程序中有一个线程,这个线程必须要睡一段时间才能等待一些将由runOnUiThread线程设置的结果,问题是当我试图制作线程时睡眠runOnUiThread也睡了一段时间,所以它不执行任何处理,直到另一个线程醒来,尽管runOnUiThread存在于另一个分离的线程中。

这是我的代码: 包含runOnUiThread的线程:

Thread xbmc = new Thread (){
            @Override
            public void run(){
                     System.out.println("one");// working perfectly
            runOnUiThread(new Runnable() {
            public void run() {
            try { 
                       System.out.println("two");// not work till the other thread wakes up
            } catch (Exception e) {
            }
        }
    });
   }
 };
         xbmc.start();

这就是我睡觉的主题:

    display = false;
    Thread wait = new Thread(new Runnable() {
        @Override
        public void run() {
            int d = 0;
            while (d != 20) {
                if (wake_up) {
                    display = true;
                    break;
                }
                try {
                    Thread.sleep(1000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                d++;
            }

            if (!display) {
                display = true;
            }
        }
    });
    wait.start();

    while(!display){}// infinite loop waits for the thread to finish it's looks or something breaks it, and there is no something can break it but the `runOnUiThread` processing results

1 个答案:

答案 0 :(得分:1)

我认为你错过了关于Thread的一些基本概念。正如你所定义的那样,你的线程似乎(没有用),它们不会阻止你的UI,因为它们在后台运行。阻止您的用户界面的 while (!display) {}循环。

你在这里等待,直到你的线程修改了这个值,我想这不是你想要实现的。您需要定义其他一些方法,例如,将while (!display)内容代码块附加到Thread