我添加了一些cordova插件代码,其中也包含IntentService。

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

但是类似“ new XWalkCookieManager()。getCookie(url)”的人行横道方法将崩溃(“此应用已关闭” + logcat崩溃)。实例化new XWalkCookieManager()正常工作,但getCookie崩溃。

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

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

最好是这样的:

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


以防止崩溃。

最佳答案

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

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

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

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

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

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

关于java - 检查人行横道是否通过Java代码运行,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34763440/

10-11 16:09