如何从线程更新ui线程

时间:2014-03-07 11:40:25

标签: android

我想构建连接到蓝牙设备的Android应用程序,并在UI Thread上打印“已连接”(如果设备已成功连接)。 但我不知道如何在线程之间传递值 有人能帮助我吗?

5 个答案:

答案 0 :(得分:1)

如果您只想在UIThread

中展示祝酒词
runOnUiThread(new Runnable() {
    @Override
    public void run() {
        // TODO Auto-generated method stub
        Toast.makeText(this, "Connected", Toast.LENGTH_SHORT).show();
    }
});

请发布您的代码,我会更新答案。

答案 1 :(得分:0)

尝试使用静态变量这是最简单的方法

答案 2 :(得分:0)

使用handler将消息发布到主线程。在onHandlemessage()中,您可以更新主线程UI。您无法从线程更新主线程UI。

使用thisthis链接进行处理程序参考。

答案 3 :(得分:0)

你有几种方法。最简单的方法是使用Activity.runOnUiThread()方法(有关详情,请参阅here)。

您也可以使用Handler来完成此操作,它会相互通信两个不同的Thread。您在UI线程中定义Handler,将其传递给处理程序,并使用它将消息发送到UI Thread。可能会找到一个很好的例子here

您还可以使用本地BroadcastReceiver。您只需定义要处理数据的接收器(因此,UI线程),并在此处处理您想要的任何内容。一个很好的例子是here

后者基于Intent,因此您需要确保传递的数据为SerializableParcelable,或者是Intent支持的数据类型。 {1}}。

----编辑----

要更新TextView,请在Thread中使用此类内容。它会在UI帖子中执行所需的操作,因此您可以轻松地从View更新Thread

try {
  runOnUiThread(new Runnable() {
    @Override
    public void run() {
      TextView tv = (TextView) findViewById(R.id.your_textview);
      tv.setText("My text updated within a Thread");
    }
  });
} catch (InterruptedException e) {
  e.printStackTrace();
}

答案 4 :(得分:0)

您可以选择上面发布的runOnUiThread,我也用它来更新来自线程的视图

public void handleMessage(Message msg) {  
    super.handleMessage(msg);  
    if(msg.what == 1) {  
        changeText(); //here you can make changes on UI
    }
}

只需从线程中调用它

textHandler.sendEmptyMessage(1);