如果我的 Activity 在显示另一个 Activity 时被破坏,我应该如何处理持久化 Android WebView?
题
我正在构建一个基于增强的 WebView(基于 PhoneGap)的 Android 应用程序。我增强了 WebView,以便从内部运行的 JavaScript 调用本机联系人选择器来选择电话号码(例如,可能由 Facebook 提供)。
我遇到的问题是,本机联系人选择器在另一个进程的活动中运行,Android 文档说,当另一个活动打开时,我的活动可能会由于内存限制而被破坏。我实际上并没有在我的应用程序中看到这种情况发生,但如果发生了,我猜测我的 WebView 的状态将被破坏,并且等待所选联系人的代码将被终止。
当联系人选择器打开时,请求联系人的活动可能会被销毁,这似乎有点疯狂。有谁知道这是否真的发生?如果有的话,有没有办法持久保存 WebView 的状态?
谢谢,
-肖恩
解决方案
有谁知道如果这确实 发生?
您正在寻找这个问题太简单。
您有WebView
。您打开联系人应用程序。当用户在联系人应用程序,一个电话进来,而在电话(使用蓝牙耳机),短信进来,使用户打开了从它的通知。虽然仍然在电话和发短信了,一个短信来与一个链接,让她水龙头,并带来了浏览器应用程序。
到了这个时候,你的活动肯定破坏,除非也许有一些最新的手机,拥有的RAM公平一点的。
现在,是常见的?否。但是,这也有无关联系人应用程序 - 如果用户按下HOME,在未来的某个时刻,你的活动可能会被破坏,以释放RAM以及
。有没有办法持久化的状态 web视图如果它?
这取决于你认为是什么“的WebView
的状态”是。这确实是的PhoneGap的工作,如果你正在一个基于PhoneGap的应用程序内。所以,你可能会考虑要求他们。
有没有办法持久保存DOM。有微不足道的方式来坚持的URL(见onSaveInstanceState()
)。并有可能成为的东西在你们之间考虑,可能会或可能无法救“的WebView
的状态”的部分。
其他提示
冗长而详细的答案有点复杂,但本质上可以归结为几点:
- 如果 Android 操作系统必须清理活动或服务,它知道如何确定优先级,哪些活动应该先清理。它根据它们当前是否位于前台(最后一个运行)、正在执行代码、等待结果还是只是处于后台不活动状态(第一个运行)来执行此操作。您可以相当确定,如果您的 WebView Activity 使用 startActivityForResult 启动了联系人选择器,它不会被终止
- 如果活动被终止,有一个完整的系统可以保存数据,例如 onPause 方法(一旦活动离开前台就会触发),
onSaveInstanceState
当您的活动即将终止时调用的方法。阅读这些内容以获取更多信息,以及屏幕方向更改时的configurationChanged 方法。如果您至少还没有浏览过 活动生命周期 开发人员页面上的文档,您必须这样做。 - 最后,我确信这个问题已经被讨论过很多次,但措辞或情况略有不同。环顾四周,看看还能发现什么。