首先,这是我正在编写的第一个Android应用程序,而且我之前几乎没有Java经验。所以没有什么是太简单 - 我很容易错过任何“明显的”。
这是我正在处理的一般设计:
这些活动将侧重于可用功能的特定领域,所有这些都依赖于相同的底层网络连接。因此,无论我的应用程序启动哪个活动,我都希望设置此连接,并让它在切换到我的应用中的其他活动时生效,但我想在完全切换到我的应用时将其关闭。
我想我想要线程。我有一些基本的工作,但不好,因为我认为我没有正确组织。到目前为止,我还无法在UI和网络线程之间传递数据,因此我无法获取请求,也无法获取响应的操作。所以我很感激任何建议。
答案 0 :(得分:4)
我想我想要线程。
你在这方面没有选择。您将需要一个在套接字上侦听传入数据的线程。在这方面,Android与标准Java没什么区别。
到目前为止,我还无法在UI和网络线程之间传递数据,因此我无法获取请求,也无法获取响应操作。
好吧,你的主题应由Service
管理。网络连接支持多个活动,因此没有一个活动应该拥有该线程。
然后,您需要决定何时应该存在网络连接。由于活动的来来去去,您需要确定网络连接是否仅在您的某个活动位于前台时才存在(在这种情况下,您可能会绑定到每个活动中bindService()
的服务),或者是否存在用户必须执行的明确“开始”和“停止”操作,因此连接可以在所有活动消失后生效(在这种情况下,您可能会使用startService()
而不是{{1} })。
一旦您知道何时以及如何开始/停止服务,您就可以决定该服务如何将其结果传达回各种活动。根据您的使用情况,有很多选项,有些比其他选项更好。已注册的听众bindService()
,广播Messenger
,Intents
等等都是候选人。其中任何一个都可以由后台线程使用,并且可以安排将数据提供给主应用程序线程上的前台活动。其他活动通常会在ContentProvider
期间刷新他们的数据,因为当他们不在屏幕上或者甚至可能被踢出RAM时,通常没有必要主动更新它们。
IOW,“建议”是一两本书中的几个章节。 : - )