2012-02-23 2 views
0

그래서 네트워크 연결이 가능해질 때까지 한 스레드 (A)가 wait()되도록하려는 안드로이드 코드를 작성하려고합니다. 스레드 A는 일부 Wi-Fi 관련 작업을 수행해야하기 때문에 BroadcastReceiver는 WifiManager.NETWORK_STATE_CHANGED_ACTION 의도와 함께 등록됩니다.onReceive() 내에서 notify()를 호출 하시겠습니까?

Boolean networkReady = new Boolean(false); 
... 
Thread A { 
    synchronized (networkReady) { 
    if (!networkReady) { 
     wait(); 
    } 
    } 
    doStuff(); 
} 
... 

브로드 캐스트 리시버의 onReceive() 메소드 :

public void onReceive(Context context, Intent intent) { 
    if (EXTRA_NETOWRK_INFO does show that network is ready) { 
    synchronized (networkReady) { 
     networkReady = true; 
     notify(); 
    } 
    } 
} 

은 현재 내가 오류 받고 있어요 : 내가 지금하고 있어요는이 같은 것입니다. "개체 전에 통지 스레드에 의해 잠겨 있지를" 그리고 난이 일을하는 법을 정말로 알 수 없다. 하나의 다른 대안으로는 작은 Thread.sleep (#)을 사용하여 networkReady 플래그를 돌리는 것이지만 실제로는 그렇게 보이지 않는다. 좋은 연습;) 어떤 아이디어?

답변

2

실제로 스레드 객체 인 wait()를 기다리고 있습니다. this.wait();를 의미합니다. 그러나 통지하는 동안 수신자 오브젝트에 대해 알립니다. 그래서 당신은 오류가 발생합니다. 같은 객체를 기다리고 기다리려고하면 networkReady 자체를 말하십시오.

+0

완벽하게 작동합니다. – hushaohan

관련 문제