java - 可在 while 循环中运行

标签 java android handler runnable

我希望在程序运行时每 5 秒执行一次 run 方法,因此我将其放入 while(true) 循环中。问题是我的应用程序由于这个 while 循环而无法运行。有人可以解释一下如何正确编码此循环以使其始终运行吗?

这是我的代码:

int i=0;    
while(true){
    Runnable x = new Runnable(){
        @Override
        public void run(){
            if(my_list_counter <= 0) 
                return;
            random_counter = rand.nextInt(my_list_counter);
            make_words_with_letters.add(list_of_letters.get(random_counter));
            for(Button b:button_list)
                if (b.getText().equals("")){
                    b.setText(list_of_letters.get(random_counter));
                    list_of_letters.remove(list_of_letters.get(random_counter));
                    my_list_counter--;
                    break;
                }

        }
    };
   i++;
   Handler handler = new Handler();
   //Run the code in runnable x at increasing time intervals of 5 seconds
   handler.postAtTime(x, SystemClock.uptimeMillis() + i*5000);

}

显然这里的错误是Runnable需要到达终点才能开始运行。但是,由于它处于 while(true) 循环中,因此它永远无法开始运行。 有人知道如何解决这个问题吗?

编辑:感谢 JavaHunter 的新代码,但仍然有一个错误:

int i=0;    

    Runnable x = new Runnable(){
        @Override
        public void run(){
            while(true){
                if(my_list_counter <= 0) 
                    return;
                random_counter = rand.nextInt(my_list_counter);
                make_words_with_letters.add(list_of_letters.get(random_counter));
                for(Button b:button_list)
                    if (b.getText().equals("")){
                        b.setText(list_of_letters.get(random_counter));
                        list_of_letters.remove(list_of_letters.get(random_counter));
                        my_list_counter--;
                        break;
                    }

            }
        }
    };
   i++;
   Handler handler = new Handler();
   //Run the code in runnable x at increasing time intervals of 5 seconds
   handler.postAtTime(x, SystemClock.uptimeMillis() + i*50);

但是这段代码只是卡住了我的应用程序。这是日志猫:

enter image description here

它显示了有关 GC 被阻止的信息,但我不知道这到底意味着什么。有人可以帮忙吗?

最佳答案

你正在做的就是创建无限多个可运行对象(正在被GC)。您应该将 while 循环放在可运行的内部。也许最好将循环条件更改为以下内容(更具可读性):

Runnable x = new Runnable(){
        @Override
        public void run(){
            while(my_list_counter > 0){ 
               random_counter = rand.nextInt(my_list_counter);
               make_words_with_letters.add(list_of_letters.get(random_counter));
               for(Button b:button_list)
                   if (b.getText().equals("")){
                       b.setText(list_of_letters.get(random_counter));
                       list_of_letters.remove(list_of_letters.get(random_counter));
                       my_list_counter--;
                       break;
                   } 
               }
        }
    };

关于java - 可在 while 循环中运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27296843/

相关文章:

java - 将经纬度坐标转换为 map 像素图像 X 和 Y 坐标 Java

java - 删除 Pane 中特定类型的节点

java - 如何从 Java 设置环境变量?

java - 为什么我的问题和照片没有相同的结果

android - 我收到 httpresponse 异常 : unauthorised for the twitter application + oauth. 。如何解决?

android - 有没有人在 64 位 Windows 7 上成功使用 64 位 Eclipse for Android 2.3 dev?

android - 如何在 android 中的处理程序上调用 removeCallbacks 或 removeCallbacksAndMessages 后再次启动处理程序

ios - 为什么我的数组会被 GCD 分派(dispatch)到主队列而清除?

java - 奇怪的 Servlet 响应问题

Java:我如何对 Windows XP 中的计算机关机使用react?