我希望我的run
方法在我的程序运行时每5秒执行一次,所以我把它放在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)
循环中,它永远不会开始运行。
有谁知道如何解决这个问题?
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被阻止的内容,但我不确切地知道这意味着什么。有人可以帮忙吗?
答案 0 :(得分:4)
你在做什么,是你正在创造无限多个可运行的对象(正在进行GCed)。你应该将while循环放在runnable中。并且最好将循环条件更改为以下(更具可读性):
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;
}
}
}
};
答案 1 :(得分:1)
将while(true)
放入run()
。