如果我的 Activity 在显示另一个 Activity 时被破坏,我应该如何处理持久化 Android WebView?

StackOverflow https://stackoverflow.com/questions/2508008

  •  22-09-2019
  •  | 
  •  

我正在构建一个基于增强的 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 方法。如果您至少还没有浏览过 活动生命周期 开发人员页面上的文档,您必须这样做。
  • 最后,我确信这个问题已经被讨论过很多次,但措辞或情况略有不同。环顾四周,看看还能发现什么。
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top