我有一个Android应用程序,在启动时,膨胀MapView,获取用户的位置,然后向我的服务器发出请求,在其位置的某个半径范围内将所有兴趣点(POI)作为JSON获取并绘制这些点地图。我希望用户能够在地图上平移,并在超出初始数据负载时看到更多兴趣点加载,就像Google地图一样。
我最初的想法是处理平移事件,当平移停止时,获取地图中心,并在该位置的某个半径范围内向POI发出另一个服务器请求。在我看来,这样很快就会发送回冗余数据并发出不必要的服务器请求。
我正在寻找一种缓存策略,我可以在其中获取获取新数据的请求,但不必为相同的数据提出额外请求。我的POI也不经常更改,因此缓存非常适合加速我的应用程序的后续启动。对于这样的事情,有没有最好的做法?或者是否首先提出更大的数据请求并根据需要获取新数据?
答案 0 :(得分:1)
我自发想到的是将方块中的POI分段为例。这些图块具有lastUpdate时间戳,客户端和服务器都以图块的形式进行通信,而不是地理位置中心点和半径。您的客户端将始终将缓存切片的lastUpdate时间戳发送到服务器,并且当该时间戳确实更改所请求的切片时,服务器将仅响应更新的数据。另一个优点是,与“点对点”计算相比,用于检索POI的算法会更快。
您的客户端应用可以根据时间戳决定何时重新请求切片。这取决于您的服务器数据更改的频率。如果它每天只更改一次,那么让您的应用每天只重新请求一次缓存切片。我的建议是基于固定大小的瓷砖(例如2平方英里)。否则,您将很难跟踪lastUpdate时间戳。 但是,您可以为缩放级别创建几个不同的“细节级别”,或者您的应用需要根据当前缩放计算左上方可见平铺和右下方可见平铺。