2011-07-02 26 views
1

首先,这是我正在编写的第一个Android应用程序,并且我以前的Java经验很少。所以没有什么太简单 - 我可以很容易地错过任何“明显”的东西。如何使用网络I/O和多项活动来组织这款Android应用程序?

这里是我处理的一般设计:

  • 长寿命的双向网络连接。
  • 当用户与UI进行交互时,请求应通过网络传出。
  • 当对所述请求的响应回来时,UI应该被更新 - 异步。
  • 该应用程序将包含多个活动。

这些活动将集中在可用功能的特定领域,所有这些都依赖于相同的底层网络连接。所以我想要建立这个连接,无论我的应用程序启动哪个活动,并且在切换到我的应用程序中的另一个活动时都能存活,但是我想在完全切换离开我的应用程序时关闭它。

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

回答

4

我想我想要线程。

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

我也是,迄今为止,无法在用户界面和网络线程之间传递数据,所以我无法获取请求或响应输出操作。

那么,你的线程应该由Service管理。网络连接支持多种活动,所以没有任何活动应该拥有该线程。

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

一旦您知道何时以及如何启动/停止服务,您可以决定该服务如何将其结果反馈给各种活动。有很多选择,根据你的使用情况,有些比其他选择更好。注册听众,Messenger,广播IntentsContentProvider等都是候选人。其中的任何一个都可以被后台线程使用,并且可以安排将数据传送到主应用程序线程上的前台活动。其他活动通常会在onResume()期间刷新其数据,因为当它们不在屏幕上或者甚至已经被踢出RAM时,主动更新它们通常没有意义。

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

+0

“IOW,”建议“是一两本书中的几章。”例如http://commonsware.com/ - 建议。 – RenniePet

相关问题