为什么我的phoneGap Android应用程序在简历中崩溃?

为什么我的phoneGap Android应用程序在简历中崩溃?,android,cordova,Android,Cordova,我最近开始编写phonegap android应用程序,并注意到当应用程序从后台恢复时(因此我将应用程序部署到android平板电脑上,按下home按钮,然后从菜单中重新打开应用程序),会出现超时错误(错误代码=-6表示与服务器的连接不成功)然后崩溃。从我测试的情况来看,只有在“开发者选项”中勾选了“不保留活动”选项时,才会出现这种情况,如果未勾选该选项,则应用程序才能按预期工作 还值得注意的是,我重新创建了默认的phonegap应用程序,运行它后遇到了相同的问题 有人能解释为什么会发生这种情况

我最近开始编写phonegap android应用程序,并注意到当应用程序从后台恢复时(因此我将应用程序部署到android平板电脑上,按下home按钮,然后从菜单中重新打开应用程序),会出现超时错误(错误代码=-6表示与服务器的连接不成功)然后崩溃。从我测试的情况来看,只有在“开发者选项”中勾选了“不保留活动”选项时,才会出现这种情况,如果未勾选该选项,则应用程序才能按预期工作

还值得注意的是,我重新创建了默认的phonegap应用程序,运行它后遇到了相同的问题

有人能解释为什么会发生这种情况,或者提出解决方案吗?显然,我可以通过简单地不勾选Don't keep activities选项来绕过这个问题,但我猜这个问题会在任何勾选了这个选项的android设备上持续存在,而这是行不通的

我正在使用phonegap 2.5.0并在运行Android 4.0.3的设备上进行测试

谢谢, Josh“Don't keep activities”是一个开发人员工具,用于模拟用户活动,这将非常难以测试。我个人认为,所有应用程序都应该在打开此设置的情况下进行第二次测试(至少运行自动测试),开发人员应该在开发过程中打开/关闭此设置

您的问题(我刚刚在v2.7上遇到)来自超时功能的愚蠢实现
CordovaWebView.loadUrlIntoView
创建并锁定(
wait()
)线程20秒(默认值),然后检查一个值以查看url是否已完成加载-如果尚未完成,则显示错误消息

此线程存在于活动的生存期之外,因此如果活动停止运行,Webview将永远无法完成url的加载,当线程醒来时,它会尝试显示错误

如果不使用“不保留活动”,也可能发生相同的崩溃,方法是简单地让用户离开应用程序,然后系统在20秒内回收活动的资源(因为它内存不足或其他原因)

使用
处理程序
似乎是处理此超时的更合适的方法,但在不改变源代码的情况下,有一些黑客的解决方法

  • 在您的
    活动结束时调用
    System.exit(0)
    。onDestroy()
    -这很糟糕,但是如果您只有一个活动而没有服务,这可能是一个选项

  • 使用反射更改
    CordovaWebView.loadUrlTimeout
    -这很糟糕,但应该可以工作,这是线程检查url是否已加载的值(inc by 1)


  • “开发者选项”是针对开发者的。在安卓4.2及更高版本上,它们甚至在默认情况下被隐藏,需要一组神秘的点击来启用它们。虽然理想情况下,应用程序不会在这种情况下崩溃,但检查过应用程序并且不是开发人员的人所占的比例非常小。而且,除非您是一名Java程序员,并且愿意/能够帮助诊断和修复问题,否则除了将问题提交到适当的问题跟踪程序之外,您几乎无能为力。同意!请在我们的bug追踪器中提交一个与此相关的问题,并包括来自logcat的大量日志样本。我们的bug追踪器就在这里:如果我们没有你的logcat的副本,我们就无法复制这个问题。@JoeB谢谢你发布这个链接,我明天上午会就此提交一个问题