2013-04-09 52 views
0

最近,我开始写一个PhoneGap的Android应用程序,并注意到,当应用从后台恢复(所以我的应用程序部署到Android平板电脑,按主页按钮,然后重新打开从菜单中的应用程序),它给出了一个超时错误(错误代码= -6的影响与服务器的连接不成功),然后崩溃。从我测试过的情况来看,这似乎只在开发人员选项中选中“不保留活动”选项时才会发生,如果未选中该选项,该应用程序将按预期工作。为什么我的phoneGap Android应用程序在恢复时崩溃?

另外值得一提的是,我重新创建默认的PhoneGap应用程序,运行它,并遇到了同样的问题。

谁能解释为什么出现这种情况,或提出一个解决办法?很明显,我可以解决这个问题,只需将不要保留活动选项取消选中,但我猜这个问题会持续在任何安装了此选项的Android设备上,这是不会做的。

我使用PhoneGap的2.5.0和运行Android 4.0.3测试设备上,

感谢, 乔希

+1

“开发人员选项” 是开发商。他们甚至隐藏在Android 4.2及以上版本的默认设置中,需要一组奥妙的按键来启用它们。虽然理想情况下应用程序不会在这种情况下崩溃,但拥有此检查并且不是*开发人员的人的百分比非常小。而且,除非你是Java程序员,并且愿意/能够协助诊断和修复问题,否则除了可能在适当的问题跟踪器上提出问题之外,你几乎无法做到这一点。 – CommonsWare 2013-04-09 20:09:08

+1

同意!请在我们的错误跟踪器中提出一个问题,并在logcat中包含大量日志。我们的bug跟踪器在这里:https://issues.apache.org/jira/browse/CB如果我们没有logcat的副本,我们不能重现此问题。 – 2013-04-09 21:37:50

+0

@JoeB感谢您发布该链接,我将在明天上午就此提交一个问题 – Josh 2013-04-09 21:42:56

回答

1

“不保留活动”是一个开发工具来模拟用户活动这将是非常难以测试。我个人认为所有应用都应该在开启此设置的情况下进行第二次测试(至少运行自动测试),开发者应该在开发过程中将其打开/关闭。

您的问题(我刚刚跑进在V2.7)来自一个愚蠢的执行超时功能。 CordovaWebView.loadUrlIntoView创建和锁(wait())20秒(默认值),在该时间之后它检查的值,以查看是否链接完成加载一个线程 - 如果它尚未完成,则显示一个错误消息。

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

死机一样可能发生,而无需使用简单地让用户退出应用程序,然后系统回收活动的资源(因为它是内存不足或某事),在20秒内“不保留活动”。

使用Handler似乎是一个更合适的方式来处理这种超时,但不改变源代码有一些hacky工作。

  1. 呼叫System.exit(0)在结束你的Activity.onDestroy() - 这是可怕的,但如果你只有一个活动,没有服务,它可能是一个选项

  2. 使用反射来改变CordovaWebView.loadUrlTimeout - 这是可怕的,但它应该工作,这是线程检查是否加载URL(由1加)的值。

相关问题