繁体   English   中英

活动之间共享数据的服务

[英]service for sharing data between activities

在我拥有的android项目中,所有活动都有一些简单的计算,但是,这些计算不依赖于任何活动。 它们取决于各种传感器值。 对于传感器的某些值,将开始新的活动。 对于新活动中的计算,还需要来自先前活动的值。 我可以按意图传递数据,但是在开始新活动之间的过渡时间内,我错过了一些传感器值。

因此,作为一种解决方法,我启动了执行计算的服务。 所有活动都实现了开始新活动的方法。 然后,活动绑定到服务,并且服务根据传感器值调用该方法以启动新活动。 这似乎可以很好地工作,并且有助于避免数据丢失。

但是,我不确定这是一个好习惯吗? 有没有更简单的方法可以做到这一点?

我喜欢您的想法,即根据传感器值处理服务中每个活动的启动。 但是,从Android的角度来看,这存在严重的内存泄漏问题。

如果我理解正确,那么您将根据服务保留的值启动活动,这完全可以。 但是,您能想到正在发起的活动中进行网络呼叫或任何其他异步工作的任何可能性吗? 然后,后台服务在该异步调用的中间启动另一个活动,然后启动新活动呢? 异步调用将返回一些要提供给调用活动的值,这是上下文无关的吗? 这将导致内存泄漏,因此可能会使您的应用程序在某些地方崩溃。

我建议为这些活动切换操作维护一个队列,在其中您可以以更复杂的方式处理活动切换。 只需等待正在进行的异步调用完成,然后向调用活动返回一些值,然后启动下一个活动即可。 每当数据来自传感器时,请在队列中推送用于启动新活动的命令,然后在没有当前异步调用正在运行的情况下立即启动新活动。

希望有帮助!

更新资料

那么有任何实施队列建议的指南吗?

您可以考虑在此处使用基本的队列实现。 队列中将包含要执行的下一个操作的信息,您将拥有另一个标志,该标志将指示要执行的操作现在是否可以安全执行。

如果我等待异步调用返回,是否会阻塞UI?

这取决于您的实现。 我不太确定您在说什么,因为我不太了解您的总体应用程序设计。

但是,我认为您需要研究RxJava ,它可以使Android在事件驱动机制下工作。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM