当前位置: 首页 > 知识库问答 >
问题:

向UI线程发送消息

子车飞鹏
2023-03-14

我正在为android中的knx模块开发一个串口应用程序。我可以向knx modulde发送和接收赞扬。当从serialport接收到消息时,我想更改ui(例如按钮属性)。我用处理程序试过了,但我无法更改ui。帮我一把。

@覆盖公共空OnSerialsData(最终字节[]缓冲区,最终int大小){......}

它是我的串行端口侦听器函数,调用insine ReadThread。此线程从我的活动的不同包中开始。我想用这种方法向主要活动发送一条消息。

共有3个答案

苏墨竹
2023-03-14

只是扩展了@auselen的答案。

在您的活动上创建以下内容:

public void messageReceived(final String msg){
runOnUiThread(new Runnable() {

    @Override
    public void run() {
    // Put here your code to update the UI

    }
});
} 

然后你可以从任何引用你活动的类中调用它。如果类没有对活动的引用,那么应该将引用传递给它。

窦华晖
2023-03-14

首先,您必须在主活动中创建一个静态处理程序:

public class MainActivity extends Activity {

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);


}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.activity_main, menu);
    return true;
}

public static Handler myHandler = new Handler(){

    @Override
    public void handleMessage(Message msg) {
        // TODO Auto-generated method stub
        super.handleMessage(msg);

        Log.e("Test", msg.getData().getCharSequence("MAINLIST").toString());

    }

};
}

然后在socket类中:

public void OnSerialsData(final byte[] buffer, final int size) {

    Message msg = MainActivity.myHandler.obtainMessage();
    Bundle bundle = new Bundle();
    bundle.putCharSequence("MAINLIST", "IS_OK");
    msg.setData(bundle);
    MainActivity.myHandler.sendMessage(msg);

}

但是您必须确保在调用OnSerialsData方法之前必须创建处理程序。

我希望这能有所帮助。

马阳晖
2023-03-14

您可以使用ctivity.runOnUiThread()与UI线程通信。阅读更多关于进程和线程的信息,尤其是关于工作线程的信息。

例如,在串行数据中,您可以调用

mActivity.runOnUiThread(new Runnable() {
    public void run() {
        mActivity.mButton.setText("message arrived!");
    }
}
 类似资料:
  • 问题内容: 我需要向程序中运行的每个线程发送信息,并且每个线程都必须处理该信息。 我无法使用常规队列来执行此操作,因为那样一来,一旦一个线程从队列中删除了数据,所有其他线程将无法再看到它。 实现此目标的最佳方法是什么? 问题答案: 一种方法是在 每个 线程中都有一个队列,广播信息的功能负责将消息插入每个线程的队列中。 例如,这类似于消息队列在Windows中的工作方式。每个执行GUI操作的线程都有

  • 问题内容: 我可以发送消息给父进程吗? 主 子进程 问题答案: 简而言之: 较长的例子,我前段时间写过:

  • 我是如何临时修复它的:考虑我已经实现了下面的方法 它向websocket会话发送一个TextMessage。我无法使整个方法同步,因为多个线程可以为不同的websocketSessions和消息调用它。我也不能将会话放在同步块中(尝试了但没有工作) 虽然,我这样解决了我的问题

  • 我有一个应用程序,它定期生成原始JSON消息数组。我能够使用avro-tools将其转换为Avro。我这样做是因为由于Kafka-Connect JDBC接收器的限制,我需要消息包含模式。我可以在记事本上打开这个文件,看到它包括模式和几行数据。 现在,我想将其发送到我的中央Kafka代理,然后使用Kafka Connect JDBC接收器将数据放入数据库。我很难理解我应该如何将这些Avro文件发送

  • 我正在尝试使用Slack传入的Webhook发送消息。我有以下代码。它运行,但当我检查我的松弛时,没有消息。谁能看出我做错了什么。

  • 本文向大家介绍C#向无窗口的进程发送消息,包括了C#向无窗口的进程发送消息的使用技巧和注意事项,需要的朋友参考一下 注:本文适用.net2.0+的winform程序 一个winform程序,我希望它不能多开,那么在用户启动第二个实例的时候,作为第二个实例来说,大概可以有这么几种做法: 1.弹个窗告知用户【程序已运行】之类,用户点击弹窗后,退出自身 2.什么都不做,默默退出自身 3.让已运行的第一个