我添加了一些还包含IntentService的cordova插件代码。
即使应用未运行,也会定期调用此服务。
但是像“新XWalkCookieManager()。getCookie(url)”这样的crosswalk方法会崩溃(“这个应用程序已关闭”+ logcat崩溃)。实例new XWalkCookieManager()
确实运行良好,但getCookie
崩溃。
我已经尝试调试它但没有成功,因为您无法将调试器附加到已关闭的应用程序。
在其中一个XWalks类/方法中是否有一个属性或方法来检查当前正在运行的人行横道?
最好会是这样的:
if(new XWalkCookieManager().isAvailable()) {
//do stuff like getCookie
}
以防止崩溃。
答案 0 :(得分:0)
与此同时,我找到了一种解决方法,以确保只有在应用程序未被杀死时才执行crosswalk方法。它与我的用例高度相关,因此需要在另一段代码中满足要求。
我的用例是,在后台位置事件中,我想发送HTTP请求。在那里,我需要包括最后使用的crosswalk-app的cookie。我更改了应用程序,以便始终将人行横道cookie保存在SharedPreferences
对象中(它调用我的cordovaplugin并告诉它saveCookie()
,然后插件从人行横道获取它。)
为了阅读cookie,这已经足够了,因为我现在可以随时从SharedPreferences
读取cookie。
现在问题是:当我在回复中收到新的cookie时,我可以把它们写回人行道吗?如果应用正在运行,我必须执行new XWalkCookieManager().setCookies()
。在kill应用程序中执行时会崩溃,因为当locationupdate发生时,crosswalk没有运行。
所以我的解决方法是:我会先将cookie保存回SharedPreferences
。然后我将Broadcast
发送到包含Cookie的MainActivity
。我还扩展了MainActivity
(使用cordova钩子脚本)来包含BroadcastReciever
,然后将cookie保存到人行横道。 MainActivity
仅在应用运行时运行。当应用程序被杀死且因此MainActivity
未运行时,没有人会收到此Broadcast
并且没有代码可以崩溃。
对于一个应该可以更容易解决的问题,这是一个巨大的解决方法。但似乎没有其他方法没有人行横道可以判断它是否正在运行(或者只是没有在那些getCookies()
等方法中崩溃)。