我最近开始编写一个phonegap android应用程序并注意到当应用程序从后台恢复时(所以我将应用程序部署到Android平板电脑,按主页按钮然后从菜单重新打开应用程序)它会超时错误(错误代码的效果= -6与服务器的连接失败)然后崩溃。从我测试的情况来看,这似乎只发生在开发者选项中选中“不要保持活动”选项时,如果未选中该选项,则应用程序按预期工作。
值得注意的是,我重新创建了默认的phonegap应用程序,运行它并遇到了同样的问题。
任何人都可以解释为什么会发生这种情况,或建议解决方案?显然我可以通过简单地保持Do not keep activities选项未选中来解决这个问题,但我猜测问题会在任何选中此选项的Android设备上持续存在,这是不会做的。
我正在使用phonegap 2.5.0并在运行Android 4.0.3的设备上进行测试,
谢谢, 约什
答案 0 :(得分:1)
“不要保留活动”是一个开发人员工具,用于模拟极难测试的用户活动。我个人认为所有应用程序都应该第二次测试(至少运行自动化测试)并启用此设置,开发人员应该在开发过程中打开/关闭它。
您的问题(我刚刚在v2.7上遇到过)来自于超时功能的愚蠢实现。 CordovaWebView.loadUrlIntoView
创建并锁定(wait()
)一个线程20秒(默认值),之后它检查一个值以查看url是否已完成加载 - 如果它尚未完成,则显示一个错误信息。
此线程存在于活动的生命周期之外,因此如果活动停止运行,则Webview永远无法完成加载URL,并且当线程唤醒时,它会尝试显示错误。
同样的崩溃可能发生在不使用“不要保持活动”的情况下,只需让用户离开应用程序,然后系统在20秒内回收活动的资源(因为内存或其他东西很少)。
使用Handler
似乎是处理此超时的更合适的方法,但是如果不更改源代码,则会有一些hacky工作。
在System.exit(0)
结尾处拨打Activity.onDestroy()
- 这太可怕了,但如果您只有一项活动且没有服务,则可能是一个选项
使用反射来更改CordovaWebView.loadUrlTimeout
- 这很糟糕,但它应该有效,这是线程检查以查看是否加载了网址(inc为1)的值。