如何在 Android 上接收实时 API 数据更新?
Posted
技术标签:
【中文标题】如何在 Android 上接收实时 API 数据更新?【英文标题】:How do I receive live API data updates on Android? 【发布时间】:2020-05-19 19:17:59 【问题描述】:我正在努力在我的 android 应用上接收实时 API 数据更新。我反对轮询,因为它会耗尽电池电量,不赞成每 5 分钟左右手动检查一次数据更新的任何事情。有没有更简单的方法来实现这一点,而无需应用不断轮询或手动检查 API 端的数据是否已更新?
我正在考虑为服务器上的某种更新添加侦听器,但不确定这是否可行。 我已经提到:How to do live updates on an android app 和其他在线线程,但没有任何帮助。 这是我当前如何使用 observables 检索数据的示例:
getCompositeDisposable().add(getDataManager()
.getGuestListApiCall(AppPreferencesHelper.getInstance().getCurrentUserId())
.subscribeOn(getSchedulerProvider().io())
.observeOn(getSchedulerProvider().ui())
.subscribe(response ->
// using the parsed response here.
, throwable ->
if (!isViewAttached())
return;
// handle the error here
if (throwable instanceof ANError)
ANError anError = (ANError) throwable;
handleApiError(anError);
));
知道该怎么做吗?任何示例应用程序都将有助于某种可以帮助查看实时更新结果的虚拟 api。
提前致谢!
【问题讨论】:
这完全取决于您要完成的工作。通常你会想要使用 Firebase / GCM 来提供推送通知;通过 Google 服务发送的微小低功耗 ping 提醒您的应用程序唤醒并调用 API 以获取更多信息。 我调用了包含特定房间数据的 api。房间信息将在一小时内不断更新,但我不想继续轮询以查看新数据的样子。 firebase 会帮助解决这种情况吗?如果我只是在应用程序处于前台时执行此操作并在后台禁用它,它会消耗大量电池吗? 如果在用户关闭应用时数据更新,并且您希望通知他们/对此更改采取行动,Firebase 将为您提供帮助。如果您只需要在用户打开应用程序时显示数据,那么打开一个新连接并在可见时每隔几秒获取一次数据是完全可以接受的。 如果我不断更新或不停地轮询会不会耗尽电池? 那么你可能只想使用 WebSockets。当用户打开应用程序或屏幕打开时打开 TCP 连接。它使用 HTTP 协议但使用 KeepAlive,它允许服务器任意向客户端发送数据。或者只是打开一个 TCP 并以您自己的方式发送数据;同样,您的最小网络活动所需的功率与保持设备唤醒和响应所需的功率相比可以忽略不计。 【参考方案1】:如果我理解您的问题,您想实时或每 5 分钟从 API 获取实时数据,因此您必须使用 SOCKET.IO 希望对你有帮助。
【讨论】:
【参考方案2】:我在聊天应用程序中实现的是,当有人向我发送消息时,我将服务器配置为向我发送带有聊天 ID 的 fcm 推送通知。当我收到推送通知时,我会调用 API 来获取聊天的详细信息。这种方法可能会对您有所帮助。如果您需要代码详细信息,请告诉我。
【讨论】:
【参考方案3】:您应该使用推送通知。它们不仅在您的应用程序处于后台或未运行时工作,而且在您的应用程序打开时工作。
不建议使用您自己的 websocket 连接,并且在您的应用关闭时也无法使用。
GCM 系统基本上在 Android 设备和 Google 的 GCM/Firebase 服务器之间维护一个单一的 websocket 连接。由于这是 Android 系统的一部分,它可以在推送通知到达时唤醒您的应用。
【讨论】:
以上是关于如何在 Android 上接收实时 API 数据更新?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Android API 30 设备中使用静态广播接收器或类似服务?