内存管理

内存是移动平台的一个关键限制。我们仔细设计并检查了内存管理,以确保没有意外的内存使用或泄漏。为了让您的游戏保持快速并占用较少的内存,请遵循以下规则。

#不需要时销毁 Web 视图

使用 UniWebView 时的一个常见错误是不断创建新的 Web 视图而不破坏未使用的视图。

一旦您不使用 Web 视图组件,我们强烈建议您尽快销毁它。要关闭和销毁 Web 视图,请将其传递给 Unity 的Destroy方法。还要重置对它的任何引用以确保代码安全:

<span style="background-color:#282c34"><span style="color:#2c3e50"><span style="color:#cccccc"><code><span style="color:#cc99cd">public</span> <span style="color:#cc99cd">class</span> <span style="color:#f8c555">MyMonoBehaviour</span> <span style="color:#cccccc">:</span> <span style="color:#f8c555">MonoBehaviour</span> <span style="color:#cccccc">{</span><span style="color:#f8c555">UniWebView</span> webView <span style="color:#67cdcc">=</span> <span style="color:#999999">//... You set the web view as a member somewhere</span><span style="color:#f8c555"><span style="color:#cc99cd">void</span></span> <span style="color:#f08d49">CloseWebView</span><span style="color:#cccccc">(</span><span style="color:#cccccc">)</span> <span style="color:#cccccc">{</span><span style="color:#f08d49">Destroy</span><span style="color:#cccccc">(</span>webView<span style="color:#cccccc">)</span><span style="color:#cccccc">;</span>webView <span style="color:#67cdcc">=</span> <span style="color:#cc99cd">null</span><span style="color:#cccccc">;</span><span style="color:#cccccc">}</span>
<span style="color:#cccccc">}</span>
</code></span></span></span>

如果 Web 视图的持有者组件(此处为MyMonoBehaviour)有可能被破坏,请添加OnDestroyMyMonoBehaviour关闭 Web 视图

<span style="background-color:#282c34"><span style="color:#2c3e50"><span style="color:#cccccc"><code><span style="color:#cc99cd">public</span> <span style="color:#cc99cd">class</span> <span style="color:#f8c555">MyMonoBehaviour</span> <span style="color:#cccccc">:</span> <span style="color:#f8c555">MonoBehaviour</span> <span style="color:#cccccc">{</span><span style="color:#f8c555">UniWebView</span> webView <span style="color:#67cdcc">=</span> <span style="color:#999999">//... You set the web view as a member somewhere</span><span style="color:#f8c555"><span style="color:#cc99cd">void</span></span> <span style="color:#f08d49">CloseWebView</span><span style="color:#cccccc">(</span><span style="color:#cccccc">)</span> <span style="color:#cccccc">{</span><span style="color:#f08d49">Destroy</span><span style="color:#cccccc">(</span>webView<span style="color:#cccccc">)</span><span style="color:#cccccc">;</span>webView <span style="color:#67cdcc">=</span> <span style="color:#cc99cd">null</span><span style="color:#cccccc">;</span><span style="color:#cccccc">}</span><span style="color:#f8c555"><span style="color:#cc99cd">void</span></span> <span style="color:#f08d49">OnDestroy</span><span style="color:#cccccc">(</span><span style="color:#cccccc">)</span> <span style="color:#cccccc">{</span><span style="color:#f08d49">CloseWebView</span><span style="color:#cccccc">(</span><span style="color:#cccccc">)</span><span style="color:#cccccc">;</span><span style="color:#cccccc">}</span>
<span style="color:#cccccc">}</span>
</code></span></span></span>

#隐藏或破坏

有一种Hide方法可以使 Web 视图不可见。但是,该Hide方法只是为了视觉效果:隐藏的网页视图仍然存在,当然还要占用内存。如果您不打算再次显示该页面,Destroy它而不是调用Hide.

我们建议您始终在浏览会话完成后尽快销毁 Web 视图。当您需要新的浏览操作时,您总是可以创建一个新的 Web 视图。

#重置 Web 视图引用以避免错误

在 Android 上,用户可以使用设备上的后退按钮关闭 Web 视图。在 iOS 上,工具栏中还有一个“完成”按钮。对于任何一种情况,如果您在脚本中持有 Web 视图的引用,则需要将其重置为nullWeb 视图关闭时。

为事件添加一个监听器OnShouldClose,当 Web 视图将被用户操作关闭时,Android 和 iOS 都会调用该监听器。在那里,您可以将对 Web 视图的引用设置回null


 
<span style="background-color:#282c34"><span style="color:#2c3e50"><span style="color:#cccccc"><code><span style="color:#cc99cd">public</span> <span style="color:#cc99cd">class</span> <span style="color:#f8c555">MyMonoBehaviour</span> <span style="color:#cccccc">:</span> <span style="color:#f8c555">MonoBehaviour</span> <span style="color:#cccccc">{</span><span style="color:#f8c555">UniWebView</span> webView<span style="color:#cccccc">;</span><span style="color:#f8c555"><span style="color:#cc99cd">void</span></span> <span style="color:#f08d49">CreateWebView</span><span style="color:#cccccc">(</span><span style="color:#cccccc">)</span> <span style="color:#cccccc">{</span>webView <span style="color:#67cdcc">=</span> gameObject<span style="color:#cccccc">.</span><span style="color:#f08d49">AddComponent</span><span style="color:#f8c555"><span style="color:#cccccc"><</span>UniWebView<span style="color:#cccccc">></span></span><span style="color:#cccccc">(</span><span style="color:#cccccc">)</span><span style="color:#cccccc">;</span>webView<span style="color:#cccccc">.</span>OnShouldClose <span style="color:#67cdcc">+=</span> <span style="color:#cccccc">(</span>view<span style="color:#cccccc">)</span> <span style="color:#67cdcc">=></span> <span style="color:#cccccc">{</span>webView <span style="color:#67cdcc">=</span> <span style="color:#cc99cd">null</span><span style="color:#cccccc">;</span><span style="color:#cc99cd">return</span> <span style="color:#f08d49">true</span><span style="color:#cccccc">;</span><span style="color:#cccccc">}</span><span style="color:#cccccc">;</span><span style="color:#cccccc">}</span>
<span style="color:#cccccc">}</span>
</code></span></span></span>

此事件还使您有机会覆盖关闭操作。如果您false在事件操作中返回,则不会关闭 Web 视图。

MyMonoBehaviour使用 的其他部分中webView,请记住 Web 视图可能已经消失了。使用前进行null检查:

<span style="background-color:#282c34"><span style="color:#2c3e50"><span style="color:#cccccc"><code><span style="color:#cc99cd">public</span> <span style="color:#cc99cd">class</span> <span style="color:#f8c555">MyMonoBehaviour</span> <span style="color:#cccccc">:</span> <span style="color:#f8c555">MonoBehaviour</span> <span style="color:#cccccc">{</span><span style="color:#f8c555">UniWebView</span> webView<span style="color:#cccccc">;</span><span style="color:#f8c555"><span style="color:#cc99cd">void</span></span> <span style="color:#f08d49">Load</span><span style="color:#cccccc">(</span><span style="color:#cccccc">)</span> <span style="color:#cccccc">{</span><span style="color:#cc99cd">if</span> <span style="color:#cccccc">(</span>webView <span style="color:#67cdcc">!=</span> <span style="color:#cc99cd">null</span><span style="color:#cccccc">)</span> <span style="color:#cccccc">{</span>webView<span style="color:#cccccc">.</span><span style="color:#f08d49">Load</span><span style="color:#cccccc">(</span><span style="color:#7ec699">"https://example.com"</span><span style="color:#cccccc">)</span><span style="color:#cccccc">;</span><span style="color:#cccccc">}</span><span style="color:#cccccc">}</span>
<span style="color:#cccccc">}</span>
</code></span></span></span>

#不使用时清理缓存

当您的用户浏览 Internet 时,它会创建一些缓存,包括缓存的图像和响应。网页也可能将内容存储在本地存储中。尽管在大多数情况下它不会占用内存,但如果您没有使用缓存,请CleanCache在适当的时候调用以清除它们:

<span style="background-color:#282c34"><span style="color:#2c3e50"><span style="color:#cccccc"><code>webView<span style="color:#cccccc">.</span><span style="color:#f08d49">CleanCache</span><span style="color:#cccccc">(</span><span style="color:#cccccc">)</span><span style="color:#cccccc">;</span></code></span></span></span>

使用UniWebView时的内存管理相关推荐

  1. [MetalKit]34-Working-with-memory-in-Metal内存管理

    本系列文章是对 metalkit.org 上面MetalKit内容的全面翻译和学习. MetalKit系统文章目录 今天我们关注一下使用GPU时的内存管理.Metal框架将内存资源定义为MTLBuff ...

  2. Windows内存管理机密+揭穿内存优化工具的骗局

    原文:The Memory-Optimization Hoax:RAM optimizers make false promises 作者:Mark Russinovich 译者:盆盆   我们在浏览 ...

  3. 深度学习中的内存管理问题研究综述

    点击上方蓝字关注我们 深度学习中的内存管理问题研究综述 马玮良1,2, 彭轩1,2, 熊倩1,2, 石宣化1,2, 金海1,2 1 华中科技大学计算机科学与技术学院,湖北 武汉 430074 2 华中 ...

  4. cocos2d-x学习之自动内存管理

    一.自动内存管理 1)概述 C++语言默认是没有提供自动内存管理的.使用者需要自己分配,自己释放.在cocos2d-x里提供了一个自动内存管理的方案.主要是通过CCObject来提供的,用户只要继承了 ...

  5. windows内存管理(2)

    因为工作集的页驻留在物理内存中,因此对这些页的访问不涉及磁盘I/O,相对而言非常快:反之,如果执行的代码或者访问的数据不在工作集中,则会引发额外的磁盘I/O,从而降低程序的运行效率.一个极端的情况就是 ...

  6. 从Oracle数据库故障到AIX内存管理

    墨墨导读:本文来自墨天轮用户"你好我是李白"的投稿,详细介绍数据库告警最核心的一套数据库1节点hang的处理过程.墨天轮主页:https://www.modb.pro/u/3997 ...

  7. Linux内存管理之内存寻址:分段机制的实现方式

    Table of Contents linux中的分段机制 linux中的GDT 用户态和内核态的数据段以及代码段4个段 任务状态段TSS 寄存器保存区域 内层堆栈指针区域 地址映射寄存器区域 链接字 ...

  8. python内存管理错误的是_Python内存管理机制

    俗话说,出来混早晚要还的,Python还有很多知识点没有总结成博客,欠了太多,先还一部分吧 1. Python对象的内存使用 内存管理是语言设计的一个重要方面.它是决定语言性能的重要因素.无论是C语言 ...

  9. 解析Java对象引用与JVM自动内存管理(2)

    解析Java对象引用与JVM自动内存管理(2) 作者:杨扬 本文选自:赛迪网 2002年11月22日 Soft References 应用实例 下面以在基于web的应用程序中使用soft refere ...

  10. 分布式存储开发:Curve中的内存管理

    前言 Curve 实践过程中遇到过几次内存相关的问题,与操作系统内存管理相关的是以下两次: chunkserver 上内存无法释放 mds 出现内存缓慢增长的现象 内存问题在开发阶段大多很难发现,测试 ...

最新文章

  1. 单独写原则Single Writer Principle
  2. 【NOIP2002】【codevs1098】均分纸牌
  3. 【模板】可持久化线段树
  4. Kaggle官网免费课程:从Python到机器学习,4小时学完一门,48小时掌握数据科学...
  5. React-JSX详细语法及渲染使用
  6. Unity Shader: 理解Stencil buffer并将它用于一些实战案例(描边,多边形填充,反射区域限定,阴影体shadow volume阴影渲染)
  7. Spring MVC中@ControllerAdvice注解实现全局异常拦截
  8. python第三方插件登录网易音乐_基于 Python3 的网易云音乐下载器(支持嵌入专辑封面等 ID3-Tags 信息)...
  9. matlab求解拉格朗日第一方程,matlab求解拉格朗日方程肿么编程
  10. ibm 的java实现_IBM Java Toolbox for 实现IBM i 消息通信
  11. [学习笔记] 银华深证100指数分级证券投资基金
  12. 为什么买入不了创业版_两点原因,为什么现在不建议你买创业板
  13. backdrop-filter: blur() safari 浏览器 无效 解决
  14. 方寸微电子T630 USB3.0超高速接口芯片 可替换赛普拉斯USB接口芯片 CYUSB3014 (应用:工业相机,视频会议, 3D打印, 高清B超,USB3.0视频采集卡, 高拍器、仪器仪表设备等)
  15. 微信小程序服务器端用什么语言开发?
  16. no transaction is in progresss
  17. WinForm的控件
  18. 【C Primer Plus第二章课后编程题】
  19. java期末知识点总结_java期末复习
  20. 苹果笔记本显卡性能测试软件,苹果新MBP性能测试成绩出炉:SSD表现出色 显卡性能偏弱...

热门文章

  1. 三星固态速度测试软件,三星SSD固态硬盘优化工具Samsung Magician使用说明
  2. 李航——《统计学习方法》(一)
  3. IDEA下载主题、修改主题、删除主题
  4. java debug怎么用_debug怎么用
  5. 量子计算机未来猜想,太厉害了吧?这台量子计算机能预测16种不同的未来​!...
  6. python处理excel文档_python处理excel文件
  7. 【观察】SAP HANA+英特尔傲腾:珠联璧合,所向披靡
  8. 为什么硬件管理里面没有eplan加密狗_Eplan2.7”没有可用加密狗“问题
  9. u盘制作双系统启动盘及在移动硬盘上安装Linux操作系统
  10. CAD2020学习教程