[英]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.