2017-08-22 2 views
0

私はBluetoothアプリケーションを開発しています。ボタンをクリックすると、スレッドを開始しています。スレッドの内側で、ble devicesをクリックしています。ボタンをクリックするとUIがハングします。私はスレッドを作成するために使用していますスレッドを繰り返し呼び出すとアンドロイドでUiがハングアップする

コードは次のとおりです。私はどこにもこのスレッドを停止しておりません

new Thread(new Runnable() { 
      @Override 
      public void run() { 
//do bluetooth stuffs 

      } 
     }).start(); 

UIがハングアップしている原因がわかりません。

答えて

0

あなたは、(仕事が終了するのを待たずに)ボタンを繰り返し押し続けると、uiが遅れることを意味しますか?または、ボタンを押した後、ちょっと待ってからもう一度押してください。

最初のケース(ボタンをすばやくマッシュしている場合)は、次のようにしてください。プロセスを最初に起動するときにブール値フラグを設定した場合、ボタンが押されるたびにそのフラグがtrueに設定し、フラグがfalseの場合にのみ検索を実行します。これがあなたの問題なのかどうかは分かりませんが、ショットに値するのでしょうか?

+0

クイックreply.Theボタンをありがとう、このリンクを参照することができますユーザーが1sを繰り返しクリックするとui hang.Myが開始されたスレッドが完了せず、スレッド要求が私に推測されたことが疑わしい。スレッドをもう一度開始する前にスレッドが実行されていることを確認する必要がある上記のコード。 –

0

代わりにスレッドプールを使用することをお勧めします。リソースは限られています。なぜボタンを押すたびに新しいスレッドを作成しているのか分かりませんでした。リソースを叩いているスレッドがあなたのアプリケーションをフリーズさせたり、デッドロック、スレッドの競合、スレッド飢餓などの実装関連の問題があり、アプリケーションをフリーズさせてしまうことがあります。 Android用

+0

usecaseは、デバイスが接続されているかどうかをチェックするonclickです。これらのことは私がスレッドの息子でやっていることです。私はここで新しいスレッドを作成するのを避けることができます。上記のコードを使用しています。 –

0

、あなたの代わりにハンドラを使用するハンドラを使用してスレッドをスレッドまたは扱うことができるより良い方法で、例えば、あなたがメインスレッドを使用したい場合は、次にように使用

new Handler().post(new Runnable() { 
      @Override 
      public void run() { 

      } 
     }); 

のように使用することができます。

new Handler(Looper.getMainLooper()).post(new Runnable() { 
      @Override 
      public void run() { 

      } 
     }); 

情報については、あなたはそれが接続プロセスがthread.Andで実行されているfails.The device.If BLEの接続を再試行するために使用される difference between Thread and Handler

関連する問題