2012-03-26 11 views
0

Dies ist mein thread:Ändern statische Variable in Anwendungsthread hat keine Wirkung

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

Ich habe die getIsInternetOn() Funktion, die eine statische Funktion in meiner AppLoader Klasse ist (die Application erstreckt).

Aus irgendeinem Grund, wenn ich den Wert der statischen booleschen Variablen in AppLoader zu false ändern, scheint es nicht auf den obigen Code zu beeinflussen.

Die seltsame Sache, dass ich die Lage, eine Ansicht, die die gleiche Variable mit den gleichen Funktionen in meiner Tätigkeit zu ändern:

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

    }); 

Antwort

0

Versuchen Sie, volatile Modifikator zu Ihrer statischen Variable hinzuzufügen.

UPD:

Es geschah, weil der Caching der Wert für Leistungszwecke.

+0

also was könnte ich tun? und wie kommt es nur im Thread vor ?? –

+0

Thread nimmt den Wert der Variablen und cache ihn, um es zu vermeiden, können Sie Ihre statische Variable wie folgt deklarieren: 'public static volatile boolean mNameOfVariable;' –

+0

Ich habe es versucht und es hat nicht funktioniert. kann es sein, weil ich eine Funktion und nicht die Variable direkt aufrufen? –

0

Unter Umständen müssen Sie Ihre boolean Variable als volatile erklären.

Verwandte Themen