0

私はアンドロイドでアプリケーションに取り組んでいます。そして、バックグラウンド スレッドから UI にデータを更新しようとしています。ただし、いくつかの理由で機能しません。誰でもエラーを見つけたり、より良い解決策を提案したりできますか? Thread を使用して Bluetooth ソケットからデータを読み取り、RunOntheUI で UI を更新しました。コードは次のとおりです。

socket = belt.createRfcommSocketToServiceRecord(UUID_SECURE);
            socket.connect();

                   stream = socket.getInputStream();
                    //  final int intch;
                       Thread timer2 = new Thread() { // Threads - do multiple things
                            public void run() {
                                try {

                                   // read data from input stream if the end has not been reached
                                   while ((intch = stream.read()) != -1) {

                                       byte ch = (byte) intch;
                                       b1.append(ByteToHexString(ch) +"/");
                                        decoder.Decode(b1.toString());  
                                        runOnUiThread(new Runnable() {
                                            public void run()
                                            {
// update the uI

                                        hRMonitor.SetHeartRateValue((int) decoder.GetHeartRate());
                                            }
                                        });
                                        Thread.sleep(1000);
                                   }
                                } catch (Exception e) {
                                       e.printStackTrace();
                                   } 
                                }};

                                timer2.start();
4

2 に答える 2

1

使用する

Your_Current_Activity.this.runOnUiThread(new Runnable() {
            @Override
            public void run() {
             hRMonitor.SetHeartRateValue((int) decoder.GetHeartRate());
           }
       });

それ以外の

runOnUiThread(new Runnable() {
      public void run()
      {
      // update the uI
      hRMonitor.SetHeartRateValue((int) decoder.GetHeartRate());
      }
   });
于 2012-07-03T20:40:28.127 に答える
0

いいえ、そうしてはいけません。UI Thread は ではないため、別のスレッドを使用して UI Thread を更新しないthread-safeでください。つまり、UI Thread を更新しても、UI Thread の動作が停止することはありません。

そして、Android にはこの作業のための機序があります。これはAsyntask、別のスレッドを作成し、必要に応じて、UI スレッドを安全に更新する方法を提供します。さらに詳しく知りたい場合は、Ayntask が UI スレッドのメッセージ キューにメッセージをドロップします。

これは、さまざまなスレッド、ハンドラー、および非同期タスクに関する私の投稿の別のリンクです。非同期タスク

この助けを願っています:)

于 2012-07-04T02:33:49.623 に答える