0

我有一个两部分的问题。两者都有些笼统。

  1. 我正在创建一个严重依赖与服务器通信的应用程序。我计划为我需要的每个存储库设置不同的类。Android 服务是在这里使用的正确模式吗?在某些情况下,我想在活动之间缓存一些东西。服务会允许我这样做吗?
  2. 假设我想为此使用服务,一旦绑定了服务,我该如何加载内容。当用户打开应用程序时,我想开始加载内容。但是,绑定服务不会阻塞,所以我不能编写向我的服务发出请求的代码onStart()吗?是否有一些辅助类会等待服务加载然后执行一个函数?我知道我可以在我的onServiceConnected()方法中添加一些代码,但我想远离这样的耦合。

希望这不是太抽象。提前致谢。

4

3 回答 3

1

1)如果您需要运行代码,即使您的活动不是,正确的答案是服务。如果您只需要缓存数据,那么将其存储在某个全局静态变量中可能没问题。

2)您的服务可以启动一个线程或异步任务。这些并行执行。onStartCommand 通常在这种情况下启动它。

于 2014-06-29T07:10:49.830 回答
1

与大多数事情一样,这些问题的答案充其量只是主观的。我需要比我目前拥有的更多信息,但我会对此进行模糊,一般的刺伤......

  1. 如果您需要一些东西不断地反复访问您的服务器,我会说使用服务。

  2. 在哪里调用它并不像需要调用多少次那么重要。话虽如此,答案是肯定的。如果您在应用程序或活动加载后立即需要这些数据,那么该onCreate方法就是需要加载它的地方。

我的建议是 A) 服务或 B)AsyncTask。

如果您必须反复访问服务器以获取数据并定期需要它,请选择 A。否则,使用 AsyncTask 并将所需的所有数据加载到对象中进行存储。然后你可以根据需要使用它,它基本上会被“缓存”。

两者之间的区别仅仅是“工作的最佳工具”。我看到你使用了一些 javascript。打个恰当的比喻,使用服务进行服务器调用而不是异步任务,相当于使用 Web 套接字(节点 js),而您可以只使用 ajax 调用。希望这可以帮助。哦,PS,请不要在Android中使用静态变量=)。

于 2014-06-29T07:20:47.173 回答
1

是的,服务是要走的路,但started服务不是bound一个。

您可以制作异步请求方法,服务可以将结果广播回您的活动。

  • 在这种情况下,异步请求是一个startService(intent)包含请求参数的 Intent。该服务将为该操作启动一个后台线程,最好您可以为此使用网络库(例如 Volley)。
  • 回复是由服务广播的,带有相关数据。

这解决了缓存的问题,因为Service可以决定返回什么。因此,如果服务没有请求的资源,它将下载(并返回)它。但是如果服务有资源,那么它只会简单地返回缓存的版本。

首先,您应该熟悉以下主题:

我不太了解您的具体需求,但您似乎想实现一个带缓存的 REST 客户端。这里有一个非常好的 Google IO 演示文稿。绝对值得一看!

于 2014-06-29T07:36:53.737 回答