在我拥有的android项目中,所有活动都有一些简单的计算,但是,计算并不依赖于任何活动。它们取决于各种传感器值。对于传感器的某些值,将启动新活动。对于新活动中的计算,还需要来自先前活动的值。我可以在意图中传递数据,但是在开始新活动之间的过渡时间内,我会错过一些传感器值。
因此,作为一种解决方法,我启动一个执行计算的服务。所有活动都实现了启动新活动的方法。然后,活动绑定到服务,服务调用方法以基于传感器值启动新活动。这似乎工作正常,有助于数据不会丢失。
但是,我不确定这是一个好习惯吗?有没有更简单的方法呢?
答案 0 :(得分:0)
我喜欢您考虑从基于传感器值的服务处理每个活动的启动。但是,从Android的角度来看,这是严重的内存泄漏问题。
如果我理解正确,您将根据服务保留的值启动活动,这完全没问题。但是,您是否可以考虑在您的活动中进行网络呼叫或任何其他异步工作的可能性?然后后台服务在异步调用中启动另一个活动然后启动新活动呢?异步调用将返回一些值,以提供给不正确的调用活动吗?这将导致内存泄漏,因此可能会在某些地方崩溃您的应用程序。
我建议为这些活动切换操作维护一个队列,您可以在其中以更复杂的方式处理活动切换。只需等待正在进行的异步调用完成并返回一些值到调用活动,然后启动下一个活动。每当数据来自您的传感器时,按下用于在队列中启动新活动的命令,然后在没有正在运行的当前异步调用的情况下立即启动新活动。
希望有所帮助!
<强>更新强>
所以有任何实施队列建议的指南吗?
您可以考虑在此处执行基本队列。队列将具有要执行的下一个操作的信息,并且您将有另一个标志,该标志将指示要执行的操作现在是否可以安全执行。
如果我等待异步调用返回,我是否会阻止 UI?
这取决于您的实施。我不太确定你在谈论什么,因为我不太了解你的整体应用程序设计。
但是,我认为你需要研究RxJava,它使Android能够处理事件驱动的机制。