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");
}
});
also was könnte ich tun? und wie kommt es nur im Thread vor ?? –
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;' –
Ich habe es versucht und es hat nicht funktioniert. kann es sein, weil ich eine Funktion und nicht die Variable direkt aufrufen? –