0

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

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

谁能解释为什么会发生这种情况,或提出解决方案?显然,我可以通过简单地取消选中“不保留活动”选项来解决这个问题,但我猜这个问题会在任何选中了这个选项的 Android 设备上持续存在,这不会发生。

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

谢谢,乔什

4

1 回答 1

1

“不要保留活动”是一种开发人员工具,用于模拟极难测试的用户活动。我个人认为所有应用程序都应该在打开此设置的情况下进行第二次测试(至少运行自动化测试),并且开发人员应该在开发过程中打开/关闭它。

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

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

如果不使用“不保留活动”,只需让用户离开应用程序,然后系统在 20 秒内回收活动的资源(因为它的内存不足或其他原因),同样的崩溃可能会发生。

使用 aHandler似乎是一种更合适的方式来处理此超时,但在不更改源的情况下,有一些 hacky 解决方法。

  1. System.exit(0)在你结束时打电话Activity.onDestroy()- 这太可怕了,但如果你只有一个活动而没有服务,它可能是一个选择

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

于 2013-05-03T17:40:25.630 回答