我正在尝试在Thread中运行Random方法。我需要将它放在一个线程中,因为它一直挂起我的主UI线程。但似乎它不起作用。日志返回0大小。我需要帮助,代码如下。
public class RandomActivity extends Activity implements Runnable {
private TextView random;
Thread thread;
private boolean flagRandom;
private ArrayList<Integer> listRandom;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
thread = new Thread(this);
flagRandom = false;
listRandom = new ArrayList<Integer>();
random = (TextView) findViewById(R.id.txtRandom);
thread.start();
for(int i=0; i<5; i++) {
Log.i("RANDOM", listRandom.get(i).toString());
}
}
@Override
public void run() {
Random rNum = new Random();
while(flagRandom) {
for(int ctr=0; ctr<5; ctr++) {
if(ctr > 0) {
int iRand = rNum.nextInt(5) + 1;
if(listRandom.contains(iRand)) {
ctr--;
} else {
listRandom.add(iRand);
}
} else {
listRandom.add(rNum.nextInt(5) + 1);
}
}
}
}
}
答案 0 :(得分:2)
当我在log
之后审核您的代码thread.start();
随机值时
线。我想告诉你线程总是在后台运行,所以当线程在后台并将随机值添加到listRandom
时,首先执行下面的代码。所以它总是返回0。
for(int i=0; i<5; i++) {
Log.i("RANDOM", listRandom.get(i).toString());
}
因此您需要在线程停止后打印线程或打印。还有一件事,在开始执行线程之前,flagRandom
标志也设置为false
。所以虽然循环没有执行。
答案 1 :(得分:1)
您的“flagRandom”设置为false。所以你的while循环永远不会执行。
答案 2 :(得分:1)
我认为你的错误在于run()
定义。 run()
应在Thread
声明中定义:
thread = new Thread(this) {
public void run() {
// DO YOUR RANDOMIZE PROCESSING HERE
}
};