在应用程序线程中更改静态变量无效

时间:2012-03-26 16:54:19

标签: multithreading android

这是我的主题:

        public void run() {
    Log.d("ConnectionThread","Starting Server Connection");
        try {
            while(isThereActivityRunning()) {
                if(AppLoader.getIsInternetOn() == 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");
                Thread.sleep(timeInterval);
            }

我有getIsInternetOn()函数,它是我的AppLoader类中的一个静态函数(扩展Application)。

出于某种原因,每当我将AppLoader中的静态布尔变量的值更改为false时,它似乎不会影响上面的代码。

奇怪的是,在我的活动中,我能够将具有相同功能的相同变量更改为视图:

       btn.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View v) {
           if (AppLoader.getIsInternetOn())
               AppLoader.setIsInternetOn(false);
           else
               AppLoader.setIsInternetOn(true);
        }

    });
    btn1.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View v) {
           if (AppLoader.getIsInternetOn())
               internetStatus.setText("Internet is On");  
           else
               internetStatus.setText("Internet is Off");  
        }

    });

2 个答案:

答案 0 :(得分:0)

您可能需要将布尔变量声明为volatile

答案 1 :(得分:0)

尝试将volatile修饰符添加到静态变量中。

<强> UPD:

可能是因为为了性能目的而缓存了值。