android线程虽然循环运行不好

时间:2012-03-29 19:37:06

标签: android multithreading

这是我的主题:

@Override
public void run() {
    Log.d("ConnectionThread","Starting Server Connection");
        try {
            while(isThereActivityRunning()) {
                if(isInternetOn == true){
                    Log.d("ConnectionThread", "Internet is On. Sending Http request");
                    results = sendGetMessage();
                    b.putString("results", results);
                    receiver.send(2, b);
                }
                else {
                    Log.d("ConnectionThread","Internet is Off. Sleeping");
                }
                ConnectionThread.sleep(timeInterval);
            }
        } catch (InterruptedException e) {
            results = e.toString();
        }
    Log.d("ConnectionThread","Server Connection Finished");
    }

isInternetOn boolean来自我所制作的事件监听器,它的值因互联网状态而改变。

出于某种原因,当互联网在(isInternetOn == true)时,它会执行if条件,然后转到其他条件。

我无法弄清楚为什么会这样做。谢谢!

1 个答案:

答案 0 :(得分:0)

我不确定我是否正确解析了您的问题,但您需要确保您在isThereActivityRunning()内检查的值已标记为volatile或已synchronized在多个线程中访问。同样适用于isInternetOn。如果您的线程没有看到此值更改,并且如果它被另一个线程更改,那么这可能是问题。您还可以使用AtomicBoolean和其他类来共享线程之间的值。