3

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

即使应用程序未运行,也会定期调用此服务。

但是像“new XWalkCookieManager().getCookie(url)”这样的人行横道方法会崩溃(“这个应用程序已关闭”+ logcat 中的崩溃)。实例化new XWalkCookieManager()确实运行良好,但getCookie崩溃了。

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

XWalks 类/方法之一中是否有属性或方法可以检查人行横道当前是否正在运行?

最好是这样的:

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

以防止崩溃。

4

1 回答 1

0

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

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

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

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

所以我的解决方法是:我将把 cookie 保存回SharedPreferences第一个。然后我发送一个BroadcastMainActivity包含 cookie 的。我还扩展MainActivity(使用科尔多瓦钩子脚本)以包含一个BroadcastReciever,然后将 cookie 保存到人行横道。MainActivity仅在应用程序运行时运行。当应用程序被终止并因此MainActivity未运行时,没有人会收到此消息Broadcast并且没有代码崩溃。

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

于 2016-04-30T08:19:54.237 回答