我添加了一些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/