我想构建连接到蓝牙设备的Android应用程序,并在UI Thread
上打印“已连接”(如果设备已成功连接)。
但我不知道如何在线程之间传递值
有人能帮助我吗?
答案 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)
答案 3 :(得分:0)
你有几种方法。最简单的方法是使用Activity.runOnUiThread()
方法(有关详情,请参阅here)。
您也可以使用Handler
来完成此操作,它会相互通信两个不同的Thread
。您在UI线程中定义Handler
,将其传递给处理程序,并使用它将消息发送到UI Thread
。可能会找到一个很好的例子here。
您还可以使用本地BroadcastReceiver
。您只需定义要处理数据的接收器(因此,UI线程),并在此处处理您想要的任何内容。一个很好的例子是here。
后者基于Intent
,因此您需要确保传递的数据为Serializable
或Parcelable
,或者是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);