JavaScript中的可靠背景地理定位服务

时间:2017-09-13 22:07:48

标签: android cordova react-native titanium nativescript

应用程序应在后台跟踪用户,对收到的位置进行一些计算,并通知用户一些感兴趣的事件。

逻辑已经用JavaScript编写(用于事后分析)。所以,为了不在Java / Swift中重新实现它,我的目标是 Cordova / ReactNative / NativeScript / Titanium

Android可能会在紧张的内存条件下杀死背景应用。为了使后台操作更可靠,可以使用Android服务。可以使服务“前景”告诉OS用户知道服务并且服务对用户是重要的。操作系统很少会杀死此类应用/服务流程。即便如此,我们也可以要求它尽快重新启动服务。

问题是看起来JavaScript VM没有启动该服务,也无法运行JavaScript逻辑。对于所有提到的框架都存在同样的问题。

因此,服务必须是全本地的,我们又回到逻辑的重新实现。

问题:

  1. 我的发现是否正确?即在任何一个提到的框架中,都没有简单的方法从服务中重新启动JavaScript VM?

  2. 在SO的某个地方,我看到了一个技巧,即服务运行一个(不可见的)Activity,它再次实例化了VM。可能吗?你能给出一个链接/解释吗?

  3. Android多久会杀死一个托管“前台”服务的进程?也许我可以忽略这种情况。

  4. 谢谢。

1 个答案:

答案 0 :(得分:0)

我的应用程序完全依赖于Android(和iOS)上可靠的背景地理定位。

在尝试了很多方法(包括我自己的原生解决方案)后,我确定了cordova-background-geolocation-lt(也适用于React NativeNativeScript)。

这是付费解决方案(非免费),但有一个原因:在我广泛的实际现场测试中,它是在所有操作系统版本(包括Android 8和iOS 11)上可靠工作的唯一解决方案 - 由于新的background geolocation limits,Android 8尤其具有挑战性。

在回答您的问题时,在实践中我发现使用foregroundService选项时Android上的此解决方案非常可靠,我的应用程序可以连续运行几个小时而不会中断。