通过java代码检查人行横道是否为运行

check if crosswalk is running via javacode

我添加了一些还包含 IntentService 的 cordova 插件代码。

将定期调用此服务,即使该应用不是 运行。

但是像 "new XWalkCookieManager().getCookie(url)" 这样的人行横道方法会崩溃("this app has been closed" + 在 logcat 中崩溃)。实例 new XWalkCookieManager() 运行良好,但 getCookie 崩溃。

我已经尝试调试它但没有成功,因为您无法将调试器附加到已关闭的应用程序。

其中一个 XWalks classes/methods 中是否有属性或方法来检查人行横道当前是否 运行?

最好是这样的:

if(new XWalkCookieManager().isAvailable()) {
    //do stuff like getCookie
}

防止崩溃。

与此同时,我找到了一种解决方法,以确保仅在应用程序未被终止时才执行人行横道方法。它与我的用例高度相关,因此需要在另一段代码中满足要求。

我的用例是,在后台位置事件中,我想发送 HTTP 请求。我需要包括人行横道应用程序最后使用的 cookie。我更改了应用程序,以便它始终将人行横道 cookie 保存在 SharedPreferences 对象中(它调用我的 cordovaplugin 并告诉它 saveCookie(),然后插件从人行横道获取它)。

对于读取 cookie,这就足够了,因为我现在可以随时从 SharedPreferences 读取 cookie。

现在的问题是:当我在响应中收到新的 cookie 时,我可以将它们写回人行横道吗?如果应用程序是 运行,我将不得不执行 new XWalkCookieManager().setCookies()。这会在已终止的应用程序中执行时崩溃,因为在发生位置更新时人行横道不是 运行。

所以我的解决方法是:我会先将 cookie 保存回 SharedPreferences。然后我将 Broadcast 发送到包含 cookie 的 MainActivity。我还扩展了 MainActivity(使用 cordova 挂钩脚本)以包含一个 BroadcastReciever,然后将 cookie 保存到人行横道。当应用程序为 运行 时,MainActivity 仅为 运行。当应用程序被终止并且因此 MainActivity 不是 运行 时,没有人会收到这个 Broadcast 并且没有代码崩溃。

对于一个应该更容易解决的问题,这是一个巨大的解决方法。但似乎没有其他方法可以判断它是否是 运行(或者只是在那些 getCookies() 等方法中不崩溃)。