如何使用网络i / o和多项活动组织此Android应用程序?

时间:2011-07-02 20:41:05

标签: android networking

首先,这是我正在编写的第一个Android应用程序,而且我之前几乎没有Java经验。所以没有什么是太简单 - 我很容易错过任何“明显的”。

这是我正在处理的一般设计:

  • 长期双向网络连接。
  • 当用户与UI交互时,请求应通过网络传出。
  • 当对所述请求的响应以异步方式返回时,应该更新UI。
  • 该应用将包含多项活动。

这些活动将侧重于可用功能的特定领域,所有这些都依赖于相同的底层网络连接。因此,无论我的应用程序启动哪个活动,我都希望设置此连接,并让它在切换到我的应用中的其他活动时生效,但我想在完全切换到我的应用时将其关闭。

我想我想要线程。我有一些基本的工作,但不好,因为我认为我没有正确组织。到目前为止,我还无法在UI和网络线程之间传递数据,因此我无法获取请求,也无法获取响应的操作。所以我很感激任何建议。

1 个答案:

答案 0 :(得分:4)

  

我想我想要线程。

你在这方面没有选择。您将需要一个在套接字上侦听传入数据的线程。在这方面,Android与标准Java没什么区别。

  

到目前为止,我还无法在UI和网络线程之间传递数据,因此我无法获取请求,也无法获取响应操作。

好吧,你的主题应由Service管理。网络连接支持多个活动,因此没有一个活动应该拥有该线程。

然后,您需要决定何时应该存在网络连接。由于活动的来来去去,您需要确定网络连接是否仅在您的某个活动位于前台时才存在(在这种情况下,您可能会绑定到每个活动中bindService()的服务),或者是否存在用户必须执行的明确“开始”和“停止”操作,因此连接可以在所有活动消失后生效(在这种情况下,您可能会使用startService()而不是{{1} })。

一旦您知道何时以及如何开始/停止服务,您就可以决定该服务如何将其结果传达回各种活动。根据您的使用情况,有很多选项,有些比其他选项更好。已注册的听众bindService(),广播MessengerIntents等等都是候选人。其中任何一个都可以由后台线程使用,并且可以安排将数据提供给主应用程序线程上的前台活动。其他活动通常会在ContentProvider期间刷新他们的数据,因为当他们不在屏幕上或者甚至可能被踢出RAM时,通常没有必要主动更新它们。

IOW,“建议”是一两本书中的几个章节。 : - )