簡體   English   中英

可在while循環中運行

[英]Runnable in while loop

我希望我的程序run每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);

但是這段代碼只是凍結了我的應用程序。 這是logcat:

在此處輸入圖片說明

它顯示了有關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;
                   } 
               }
        }
    };

while(true)放入run()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM