Android 如何从线程更新uithread
我想构建一个安卓应用程序,连接到蓝牙设备,如果设备连接成功,则在Android 如何从线程更新uithread,android,Android,我想构建一个安卓应用程序,连接到蓝牙设备,如果设备连接成功,则在UI线程上打印“connected”。 但是我不知道如何在线程之间传递值 有人能帮我吗?尝试使用静态变量如果您只是想在UIThread runOnUiThread(new Runnable() { @Override public void run() { // TODO Auto-generated method stub Toast.makeText(this, "Connecte
UI线程上打印“connected”。
但是我不知道如何在线程之间传递值
有人能帮我吗?尝试使用静态变量如果您只是想在UIThread
runOnUiThread(new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
Toast.makeText(this, "Connected", Toast.LENGTH_SHORT).show();
}
});
请发布您的代码,我将更新答案。使用处理程序将消息发布到主线程。在onHandlemessage()
中,可以更新主线程UI。无法从线程更新主线程UI
使用和链接作为处理程序参考。您有几种方法。最简单的方法是使用Activity.runOnUiThread()
方法(有关更多信息,请参阅)
您也可以使用Handler
s来实现这一点,它将两个不同的Thread
s相互通信。在UI线程中定义处理程序
,将其传递给处理程序,并使用它向UI线程
发送消息。也许可以找到一个很好的例子
您还可以使用本地广播接收器
。您只需定义要在其中处理数据的接收器(因此,UI线程)并在此处处理您想要的任何内容。一个很好的例子是
后者2基于Intent
s,因此您需要确保所传递的数据实现了Serializable
或Parcelable
或是Intent
支持的数据类型
----编辑---
要更新文本视图
,请在线程中使用类似的内容。它将在您的UI
线程中运行所需的操作,因此从线程更新视图
不会有问题:
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();
}
您可以选择上面发布的runOnUiThread,我也使用它从线程更新视图
public void handleMessage(Message msg) {
super.handleMessage(msg);
if(msg.what == 1) {
changeText(); //here you can make changes on UI
}
}
从线程中调用它就可以了
textHandler.sendEmptyMessage(1);
感谢您的回答,但我不明白如果使用run-on UI方法,如何从连接活动访问TextView