Android 如何最好地构建一个基于请求接收数据并必须异步处理响应的应用程序

Android 如何最好地构建一个基于请求接收数据并必须异步处理响应的应用程序,android,multithreading,Android,Multithreading,我正在开发一个应用程序,它通过WIFI发送请求,并接收(有时也会延迟)该请求的回复 虽然很明显不能在UI线程中进行通信,但我想知道应该使用哪种方案来理解这种情况下的优点/缺点 3个线程的外观如下所示: 用户界面 通信管理器(cM):管理要发送的请求并解释答案 通信SenderandReceiver(cSR):发送和接收消息,以便cM不会被阻止。它有一个无止境的循环来接收任何可能出现的答案 据我所知,cM和cSR之间存在以下可能性: cM调用cSR.sendRequest发送请求。cM通过其处理程

我正在开发一个应用程序,它通过WIFI发送请求,并接收(有时也会延迟)该请求的回复

虽然很明显不能在UI线程中进行通信,但我想知道应该使用哪种方案来理解这种情况下的优点/缺点

3个线程的外观如下所示:

  • 用户界面
  • 通信管理器(cM):管理要发送的请求并解释答案
  • 通信SenderandReceiver(cSR):发送和接收消息,以便cM不会被阻止。它有一个无止境的循环来接收任何可能出现的答案
  • 据我所知,cM和cSR之间存在以下可能性:

  • cM调用cSR.sendRequest发送请求。cM通过其处理程序从cSR接收响应。cSR像这样向cM报告

    mHandler.ActainMessage(主屏幕消息键,数据,-1) .sendToTarget()

  • cM调用cSR.sendRequest发送请求。cSR像这样向cM报告

    cM.接受响应(数据)

  • 我不知道该用哪一个,甚至不知道区别在哪里

    这里有一个很好的比较,但它确实不能回答我的问题。从那里我只知道我不能使用AsyncTask,因为我需要一个无止境的接收器循环。我不能使用服务,因为它们会阻塞UI

    我希望我能说清楚


    非常感谢

    为什么不编写cM来为每条消息使用一个新的AsyncTask实例呢?基本上,生成一个新的,只等待其响应,然后当响应到达时,它通知cM它得到了响应,并且处理继续?

    答案会在任何时候返回(如果有的话),因此可能是cM发送R1、R2、R3,然后只返回A1。因此,异步任务无法真正等待响应。这就是为什么我需要无限的接收器环路。但是谢谢你的建议!你是如何发送请求的?我的想法是,您可以通过http之类的方式来完成,这样您就可以生成一个新的异步任务来发送请求并等待响应;对你必须提出的每一个请求都这样做,然后他们会照顾好自己。或者,如果您正在将消息发送到以太中,并等待从以太接收消息,那么您必须构建处理消息并将其发送给所需收件人的东西。在这种情况下,消息必须有一个收件人,以便您知道发送到哪里。是的,这是后一种情况-我的问题是关于通过1.mHandler.ActainMessage(Main_screen.MESSAGE_KEY,data,-1.sendToTarget()从cSR向cM报告;或2.cM.接受响应(数据);我真的不知道有什么不同???如果你发布一些代码,我可以试着帮你,我假设你知道这些方法的作用-但我需要更多的上下文。在重写了一整天的通信后,答案是:这会带来很大的不同。在线程之间使用简单的方法进行通信是一个很大的错误——它会填充调用堆栈。必须使用处理程序来避免这种情况!因此,无论谁读了这篇文章,都会为自己节省大量的工作!