2012-03-26 111 views
0

这是我的线程:改变应用程序线程静态变量没有效果

 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"); 
     } 

    }); 

回答

0

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

UPD:

这可能发生,因为缓存出于性能的价值。

+0

我该怎么办?以及它如何只发生在线程中? – 2012-03-26 17:22:00

+0

线程获取变量的值并缓存它,为了避免它,你可以像这样声明你的静态变量:'公共静态变量boolean mNameOfVariable;' – 2012-03-26 17:23:14

+0

我试过了,它没有工作。它可以是因为我直接调用一个函数而不是变量? – 2012-03-26 17:52:10

0

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