이 내 스레드 : 나는 (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
으로 변경할 때마다 위의 코드에 영향을 미치지 않는 것처럼 보입니다.
내 활동 안에 내가 동일한 기능을 가진보기에 동일한 변수를 변경할 수 있어요 있다는 이상한 것은 : 당신은 volatile
로 부울 변수를 선언해야 할 수도 있습니다
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");
}
});
내가 무엇을 할 수 있습니까? 어떻게 스레드에서만 발생합니까 ?? –
Thread는 변수의 값을 가져 와서 캐쉬하기 때문에 정적 변수를 선언 할 수 있습니다.'public static volatile boolean mNameOfVariable;' –
ive 그것을 시도하면 작동하지 않습니다. im이 함수가 아니라 변수를 직접 호출하기 때문일 수 있습니까? –