1

我正在构建一个基于增强的 WebView(基于 PhoneGap)的 Android 应用程序。我已经增强了 WebView,以便您可以从内部运行的 JavaScript 调用本机联系人选择器来选择电话号码(例如,可能由 Facebook 提供)。

我遇到的问题是本机联系人选择器在另一个进程的活动中运行,Android 文档说,当另一个活动打开时,我的活动可能会由于内存限制而被破坏。我实际上并没有在我的应用程序中看到这种情况,但如果它发生了,那么我猜我的 WebView 的状态将被破坏,并且等待选择的联系人的代码将被终止。

在联系人选择器打开时,请求联系人的活动可能会被破坏,这似乎有点疯狂。有谁知道这是否真的发生?如果有的话,有没有办法保持 WebView 的状态?

谢谢,

-肖恩

4

2 回答 2

1

有谁知道这是否真的发生?

你看问题太简单了。

你有一个WebView. 您打开联系人应用程序。当用户在联系人应用程序中时,有一个电话打进来。在打电话时(使用蓝牙耳机),一条短信进来,所以用户从它的通知中打开它。当她还在打电话和发短信时,一条带有链接的文本进来了,所以她点击它并调出浏览器应用程序。

到这个时候,你的活动肯定会被破坏,除了一些最新的手机,它们可能有相当多的 RAM。

现在,这很常见吗?不。但是,这也与联系人应用程序无关——如果用户按下 HOME,在将来的某个时候,您的活动也可能被销毁以释放 RAM。

如果有的话,有没有办法保持 WebView 的状态?

这取决于你认为的“状态WebView”是什么。如果您正在制作基于 PhoneGap 的应用程序,这确实是 PhoneGap 的工作。所以,你可以考虑问问他们。

没有办法持久化 DOM。有一些简单的方法可以保存 URL(请参阅 参考资料onSaveInstanceState())。并且可能有一些东西你认为是“状态”的一部分WebView,可能会也可能不会保存。

于 2010-03-24T14:14:57.973 回答
0

冗长而详细的答案有点复杂,但基本上可以归结为几点:

  • 如果 Android 操作系统必须清理活动或服务,它知道如何优先处理应该先处理的活动或服务。它根据他们当前是否在前台(最后一个)、在执行代码的中间、等待结果或只是在后台处于非活动状态(第一个去)来执行此操作。您可以合理地确定,如果您的 WebView Activity 使用 startActivityForResult 启动了联系人选择器,它不会被杀死
  • 如果一个活动被杀死,有一个完整的系统可以保存数据,例如 onPause 方法(一旦你的活动离开前台就会触发),onSaveInstanceState当你的活动即将结束时调用的方法。阅读这些以获取更多信息,以及屏幕方向更改时的 configurationChanged 方法。如果您至少还没有浏览过开发人员页面上的Activity Lifecycle文档,那么您必须这样做。
  • 最后,我确信这个问题已经被多次解决,但措辞或情况略有不同。环顾四周,看看你还能找到什么。
于 2010-03-24T14:00:54.620 回答