2016-01-13 86 views
3

我添加了一些也包含IntentService的cordova插件代码。检查crosswalk是否通过javacode运行

即使应用未运行,也会定期调用此服务。但是像“new XWalkCookieManager()。getCookie(url)”这样的crosswalkmethods会崩溃(“此应用程序已关闭”+在logcat中崩溃)。实例​​确实工作正常,但getCookie崩溃。

我已经尝试调试它没有成功,因为您不能将调试器附加到封闭的应用程序。

是否有一个XWalks类/方法中的某个属性或方法用于检查当前正在运行的人行横道?

最佳将是这样的:

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

防止死机。

回答

0

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

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

对于阅读cookie,这是足够的,因为我可以在任何时候从SharedPreferences读取cookie。

现在的问题是:当我在回复中收到新的cookie时,我可以将它们写回人行横道吗?如果应用程序正在运行,我将不得不做new XWalkCookieManager().setCookies()。这会在死亡应用程序中执行时崩溃,因为在locationupdate发生时crosswalk不在运行。

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

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