2012-03-29 5 views
1

これは私のスレッドで実行していないながら:アンドロイド糸ループがうまく

@Override 
public void run() { 
    Log.d("ConnectionThread","Starting Server Connection"); 
     try { 
      while(isThereActivityRunning()) { 
       if(isInternetOn == 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"); 
       } 
       ConnectionThread.sleep(timeInterval); 
      } 
     } catch (InterruptedException e) { 
      results = e.toString(); 
     } 
    Log.d("ConnectionThread","Server Connection Finished"); 
    } 

isInternetOnbooleanは私が作ったイベントリスナーからであり、それの値は、インターネットの状態によって変更されます。インターネットは(isInternetOn == true)上にあるとき、それは、その後の条件とは、他の条件に行かない場合は何らかの理由で

..

それがこれをやっている理由を私は理解することはできません。ありがとう!

+1

あなたは条件が、一度実行睡眠が続く、それは場合をスキップして、他に行く新しいループ繰り返しが続いていない場合ことを確認していますか? –

答えて

0

私が正しくあなたの質問を解析していますが、あなたはisThereActivityRunning()の内側にチェックされている値はvolatileとしてマークされているか、それが複数のスレッドにアクセスされた場合​​されていることを確認する必要があるわかりません。 isInternetOnも同じです。あなたのスレッドがこの値の変更を見ていない場合、それが別のスレッドによって変更されている場合、これはおそらく問題です。 AtomicBooleanと他のクラスを使用してスレッド間で値を共有することもできます。

+0

私はブール関数を揮発させることはできません。そこに実行している任意の活動だとされていない場合、それはスレッド –

+0

と私は、このスレッドが実行しているを停止しますwhileループを停止... と私はプライベート揮発性ブールisInternetOnを宣言している場合は、この機能のチェック。 –

+0

@AsafNevoはい私は方法を考慮に入れて私の答えを変更しました。 – Gray