【问题标题】:Android: Fetch changed data on server in real-time. Which technique is better?Android:实时获取服务器上更改的数据。哪种技术更好?
【发布时间】:2014-01-28 19:44:06
【问题描述】:

我正在构建一个应用程序,可以在地图上显示用户朋友的实时位置。 每个用户在每个定义的时间间隔(时间和距离)更新他在服务器 (Parse.com) 上的当前位置。 当用户打开 FindFriends 活动时,他将获得一张带有朋友位置标记的地图。 好友位置数据可以通过两种方式获取:

  1. 当 Activity 运行时,我正在调用一个 AsyncTask,它将在一个 while 循环中(在 doInBackground 内部)从服务器下载位置数据,然后每次调用 publishProgress() 来处理地图上的更改。
  2. 我写了一个云代码,每次用户在服务器上更新他的位置时都会调用它,它会向相关用户发送推送通知(用户看不到通知)。当 FindFriends 活动运行时,广播接收器正在接收这些推送并更新地图上的位置数据。

我的问题是:哪种方法更适合我的需求,或者我应该采取不同的方式?当然,我希望将电池消耗保持在最低限度,但不以获取几乎实时的数据为代价。

【问题讨论】:

    标签: android location parse-platform


    【解决方案1】:

    我真的不认为这是一个合适的问题,因为您真的应该只使用每个实现制作一个原型,然后看看哪个在您的特定用例中性能更高。但是,我可以说我绝对更喜欢云解决方案。我已经使用GCM 实现了一个消息传递客户端,并且从我的测试来看,更新确实非常快(当并排测试两个客户端时,几乎没有明显的延迟时间)。因此,我认为使用 GCM 实现它不会对您的用户体验产生负面影响,并且它确实具有消除无意义的服务器轮询的优点,当可能没有更新时 - 这可以节省电池。

    【讨论】:

    • 感谢您的快速回复。我已经实现了这两种方式并且它们都可以工作,但是我不知道当有很多用户有很多关系时它会如何响应。我不知道当我一次向 100 个用户发送推送时会发生什么。而且我看不到在发布之前进行测试的方法。所以我的问题是实现这样一个功能的正确方法是什么。
    • 其实这种情况下使用GCM可能更合适。请参考此链接:developer.android.com/training/cloudsync/gcm.html,以及“高效发送组播消息”部分
    • 好吧,我已经意识到我应该通过推送来做到这一点,但是我正在使用 Parse.com 云,并且 Parse Push 引擎正在处理推送。有关系吗?我应该切换到 GCM 吗?
    • blog.parse.com/2014/01/14/parse-push-adds-support-for-gcm Parse 现在支持 GCM。谢谢沉没。解决了
    【解决方案2】:

    如果您想要实时数据,那么push notification GCM 不是一个好主意,因为无法保证所有用户都会及时收到推送通知。有时您会在推送通知中遇到延迟。

    在特定情况下,如果处理得当,AsyncTask 或 Service 可能是执行所需任务的好方法。您应该可以控制 AsyncTask/Service,以便您可以随时停止它。

    【讨论】:

    • 所以你建议获取所有数据并在 AsyncTask 或 Service 中处理它,即使这意味着我得到了不必要的数据?每个用户都会有很多朋友需要展示(可能超过 50 个),所以我试图找到最有效的方法...
    • 你的后端显示只向你发送改变的数据,这意味着如果你有 50 个朋友并且其中 3 个的位置正在改变,那么你的后端应该向你发送 3 个朋友的数据而不是全部
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-22
    • 1970-01-01
    • 2019-01-21
    • 1970-01-01
    • 2013-10-03
    • 2020-09-29
    相关资源
    最近更新 更多