2013-01-31 65 views
1

我使用下面的代碼,註冊一個觀察員的活動線程會導致應用程序變得unreponsive

活動:

//Register for network status updates 
NetworkStatus networkStatus = new NetworkStatus(this); 
networkStatus.addObserver(new OfflineActivity()); 
Thread thread = new Thread(networkStatus); 
thread.run(); 

主題:

@Override 
public void run() { 

    for(;;) { 
     Log.d("NetworkStatus", "Checking Network Status"); 
     if(isConnectedToInternet(context)){ 
      notifyObservers(); 
      Log.d("NetworkStatus", "Network Connection is established"); 
     } 
     else { 
      Log.d("NetworkStatus", "Not connected to network"); 
     } 
    } 
} 

當我點擊進入活動,該程序變得沒有反應..任何想法?

+3

嗯,無限循環生成notifyObservers()消息連接到互聯網? –

+0

我有一個thread.sleep(),但我刪除它,因爲我認爲這是造成問題。問題是thread.run()而不是thread.start()。 – TomSelleck

回答

3

您應該使用.start();

Thread thread = new Thread(networkStatus); 
thread.start(); 

當你明確地調用run方法,它實際上並沒有產生一個新的線程,而不是方法調用仍然運行在UI線程。

+1

當然,整天都在犯這樣的錯誤,謝謝(再次:P)! – TomSelleck

+1

沒問題:-)請記住,多線程有可能嚴重失敗。一定要小心! –

+0

@Tomcelic不要忘記接受這個答案:-) –

2

您的線程運行在無限循環中。請添加休息條件,以便它可以退出。

相關問題