gpt4 book ai didi

java - Android 线程、服务以及它们之间的双向通信

转载 作者:行者123 更新时间:2023-11-30 04:10:02 24 4
gpt4 key购买 nike

我正在努力思考这里需要发生的事情。我目前正在开发一个运行服务的应用程序。该服务在启动时会打开一个在后台线程中运行的网络服务器。

在此服务运行期间,用户可以随时从浏览器向设备发送命令。目前的事件顺序如下。

  1. 用户向服务器发送请求
  2. 服务器通过 msg 处理程序构造向服务发送消息,它发送 url 参数等数据
  3. 该服务对数据做它想做的事,并想在浏览器中向用户发送一些反馈消息
  4. ??????
  5. 服务器对请求的响应包含来自服务的反馈消息。

我的函数设置方式我需要在等待服务响应时暂停我的 serve() 函数,然后在收到消息后恢复并发送 http 响应。

网络服务器.java

public Response serve( String uri, String method, Properties header, Properties parms, Properties files )
{

Bundle b = Utilities.convertToBundle(parms);
Message msg = new Message();
msg.setData(b);
handler.sendMessage(msg);
//sending a message to the handler in the service

return new NanoHTTPD.Response();
}

命令服务.java

public class CommandService extends Service {

private WebServer webserver;
public Handler handler = new Handler() {
@Override
public void handleMessage(Message msg) {
execute_command(msg.getData());//some type of message should be sent back after this executes

};

有什么建议吗?这种结构是解决问题的最佳方式,还是您能想出更好的设计来实现更简洁的实现?

最佳答案

我认为缺少答案是因为您没有非常具体地说明您的问题是什么。根据我的经验,在 StackOverflow 上获得一般架构建议的简单或直接问题的答案会更容易。

我不是 Android 方面的专家,但我会试一试。我的问题是,为什么你有一个在服务后台运行的 Web 服务,为什么不只有一个类,让你的服务成为 Web 服务?

关于线程、通信和 hibernate ,要记住的主要事情是网络服务器需要始终可用以服务新请求,同时服务当前请求。除此之外,客户端等待线程完成其任务(即线程“阻塞”)是正常的。因此,大多数网络服务器都会生成一个新线程来处理每个传入的请求。如果您有一个后台线程,但在等待后台线程完成其任务时阻塞了初始线程,那么您的情况不会比完成所有事情更好在一个线程上。实际上,为了简单起见,后者更可取。

如果 Android 在收到请求时实际上为您生成新线程,那么就不需要后台线程。只需在一个线程上同步执行所有操作,并为简单而高兴!

关于java - Android 线程、服务以及它们之间的双向通信,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11001910/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com