0

我正在开发 android 中的应用程序。我正在尝试从后台线程将数据更新到 UI。但是,由于某些原因,它不起作用。任何人都可以找出错误或提出更好的解决方案吗?我使用 Thread 从蓝牙套接字读取数据并使用 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 线程。如果你想了解更多细节,Asyntask 会将消息放到 UI Thread 的消息队列中。

这是我关于不同线程、处理程序和 Asyntask 的帖子的另一个链接。异步任务

希望这有帮助:)

于 2012-07-04T02:33:49.623 回答