我有两个问题。两者都有点笼统。
onStart()
中编写使用该服务发出请求的代码吗?是否有一些辅助类会等待服务加载然后执行一个函数?我知道我可以在我的onServiceConnected()
方法中添加一些代码,但我想远离这样的耦合。希望这不是太抽象。提前谢谢。
答案 0 :(得分:1)
1)如果您的活动不是需要运行代码,那么正确的答案就是服务。如果您只需要缓存数据,那么将其存储在某个地方的全局静态变量中可能没问题。
2)您的服务可以启动Thread或AsyncTask。这些并行执行。 onStartCommand通常在这种情况下启动它。
答案 1 :(得分:1)
与大多数事情一样,这些问题的答案充其量也是主观的。我现在需要更多的信息,但我会对此进行模糊的,一般性的尝试......
如果您需要持续不断地敲击服务器,我会说要使用服务。
你所说的它并不像需要调用的次数那么重要。话虽如此,答案是肯定的。如果在加载应用程序或活动时需要此数据,则onCreate
方法是需要加载的地方。
我的推荐是A)服务或B)AsyncTask。
如果您必须反复点击服务器以获取数据并且需要定期使用,请使用A.否则,请使用AsyncTask并将所需的所有数据加载到对象中进行存储。然后你可以根据需要使用它,它基本上会被“缓存”。
两者之间的区别仅仅是“工作的最佳工具”。我看到你使用一些JavaScript。为了给出一个合适的类比,使用服务进行服务器调用而不是异步任务,就等于使用web套接字(节点js)时,你只能使用ajax调用。希望这可以帮助。哦和PS,请不要在Android =)中使用静态变量。
答案 2 :(得分:1)
是的,服务是可行的方式,但是started
服务,而不是bound
服务。
您可以制作异步请求方法,服务可以将结果广播回您的Activity。
startService(intent)
的{{1}}
包含请求参数的Intent。该服务将启动该操作的后台线程,最好您可以使用网络库(例如Volley)。这解决了缓存问题,因为Service
可以决定返回什么。因此,如果服务没有所请求的资源,它将下载(并返回)它。但是如果服务有资源,那么它只会返回缓存版本。
首先,您应该熟悉这些主题:
我对您的具体需求知之甚少,但您似乎想要使用缓存实现REST客户端。 here上有一个非常好的Google IO演示文稿。绝对值得一看!