これは私のスレッドである:私は(Application
を拡張する)私のAppLoader
クラスの静的関数をあるgetIsInternetOn()
機能を持っている変更する静的変数は効果がありません
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);
}
。
何らかの理由で、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");
}
});
どうすればいいですか?どのようにスレッドでのみ起こるのですか? –
スレッドは変数の値を受け取り、キャッシュします。これを避けるには、静的変数を宣言できます: 'public static volatile boolean mNameOfVariable;' –
iveそれを試してみました。それは変数を直接呼び出すのではなく関数を呼び出すことができるからですか? –