线程内随机不起作用

时间:2012-02-11 05:10:31

标签: android

我正在尝试在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);
            }
        }
    }
}

}

3 个答案:

答案 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
    }
};