与此同时,我找到了一种解决方法,以确保仅在应用程序未被杀死时才执行人行横道方法。它与我的用例高度相关,因此需要符合另一段代码的要求。
我的用例是,在后台位置事件中,我想发送 HTTP 请求。在那里我需要包含人行横道应用程序的最后使用的 cookie。我更改了应用程序,使其始终将人行横道 cookie 保存在一个SharedPreferences对象中(它调用我的 cordovaplugin 并告诉它saveCookie(),然后插件从人行横道中获取它)。
对于读取 cookie,这就足够了,因为我现在可以随时读取 cookie SharedPreferences。
现在的问题是:当我在响应中收到新的 cookie 时,我可以将它们写回人行横道吗?如果应用程序正在运行,我将不得不这样做new XWalkCookieManager().setCookies()。这将在被终止的应用程序中执行时崩溃,因为当位置更新发生时人行横道没有运行。
所以我的解决方法是:我将把 cookie 保存回SharedPreferences第一个。然后我发送一个Broadcast到MainActivity包含 cookie 的。我还扩展MainActivity(使用科尔多瓦钩子脚本)以包含一个BroadcastReciever,然后将 cookie 保存到人行横道。MainActivity仅在应用程序运行时运行。当应用程序被终止并因此MainActivity未运行时,没有人会收到此消息Broadcast并且没有代码崩溃。
对于应该更容易解决的问题,这是一个巨大的解决方法。但似乎没有其他方法没有人行横道可以判断它是否正在运行(或者只是没有在那些getCookies()等方法中崩溃)。