2

我正在开发一个使用 cordova(2.1) 和一些自定义插件的 iOS 应用程序。

我试图面对的问题如下:当我显示我的插件(基本上是一个比内置的cordova插件具有更多功能的相机插件)时,有时我会收到一个内存警告,并且随后会卸载包含 webview 的视图. 这对我来说是一个非常大的问题,因为一旦我的 imagePicker 被关闭,webview 就不会恢复。

我查看了 CDVCamera 插件源,我注意到的是:

(1)插件保存webview:

 // we need to capture this state for memory warnings that dealloc this object
    cameraPicker.webView = self.webView;

在这里,我不明白发生了什么,好的,我们保存 webview 以防在内存警告后将其卸载,但我无法弄清楚 webview 在框架中的恢复方式/位置。

(2) 插件使用一个名为 hasPendingOperation 的 Bool 属性,如果我理解,CDVViewController 在收到内存警告时使用此属性,以避免在插件处于活动状态时清除内存。

我不明白的第一件事是为什么当我的控制器收到内存警告超级控制器(CDVViecontroller)没有收到它时?

其次,是否可以将 CDVCamera 插件使用的模式与 CDVViewController 一起应用来处理自定义插件中的内存警告?

任何有助于使用cordova管理内存警告以避免webview被卸载的帮助将不胜感激。

4

1 回答 1

1
  1. 这可能是一种遗留使用,在哪里需要对WebView进行引用,以便在选择器被解雇时将JavaScript写入其中。并不真正需要,因为我们使用不同的方式写回 webview:https ://github.com/apache/cordova-ios/blob/0a978a6617c58bfa98968e0c6bdcdb4f10f01902/CordovaLib/Classes/CDVCamera.m#L301

  2. 不确定您的意思,CDVViewController 也确实收到内存警告,并查询每个插件的 hasPendingOperation 属性。如果设置为 true,则不会释放插件。请注意,如果内存没有充分释放,iOS 看门狗可能会终止应用程序。

于 2012-11-06T06:27:04.767 回答