使用UniWebView时的内存管理
內(nèi)存管理
內(nèi)存是移動(dòng)平臺(tái)的一個(gè)關(guān)鍵限制。我們仔細(xì)設(shè)計(jì)并檢查了內(nèi)存管理,以確保沒有意外的內(nèi)存使用或泄漏。為了讓您的游戲保持快速并占用較少的內(nèi)存,請(qǐng)遵循以下規(guī)則。
#不需要時(shí)銷毀 Web 視圖
使用 UniWebView 時(shí)的一個(gè)常見錯(cuò)誤是不斷創(chuàng)建新的 Web 視圖而不破壞未使用的視圖。
一旦您不使用 Web 視圖組件,我們強(qiáng)烈建議您盡快銷毀它。要關(guān)閉和銷毀 Web 視圖,請(qǐng)將其傳遞給 Unity 的Destroy方法。還要重置對(duì)它的任何引用以確保代碼安全:
<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)有可能被破壞,請(qǐng)?zhí)砑覱nDestroy并MyMonoBehaviour關(guān)閉 Web 視圖
?
#隱藏或破壞
有一種Hide方法可以使 Web 視圖不可見。但是,該Hide方法只是為了視覺效果:隱藏的網(wǎng)頁視圖仍然存在,當(dāng)然還要占用內(nèi)存。如果您不打算再次顯示該頁面,Destroy它而不是調(diào)用Hide.
我們建議您始終在瀏覽會(huì)話完成后盡快銷毀 Web 視圖。當(dāng)您需要新的瀏覽操作時(shí),您總是可以創(chuàng)建一個(gè)新的 Web 視圖。
#重置 Web 視圖引用以避免錯(cuò)誤
在 Android 上,用戶可以使用設(shè)備上的后退按鈕關(guān)閉 Web 視圖。在 iOS 上,工具欄中還有一個(gè)“完成”按鈕。對(duì)于任何一種情況,如果您在腳本中持有 Web 視圖的引用,則需要將其重置為nullWeb 視圖關(guān)閉時(shí)。
為事件添加一個(gè)監(jiān)聽器OnShouldClose,當(dāng) Web 視圖將被用戶操作關(guān)閉時(shí),Android 和 iOS 都會(huì)調(diào)用該監(jiān)聽器。在那里,您可以將對(duì) Web 視圖的引用設(shè)置回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>
此事件還使您有機(jī)會(huì)覆蓋關(guān)閉操作。如果您false在事件操作中返回,則不會(huì)關(guān)閉 Web 視圖。
在MyMonoBehaviour使用 的其他部分中webView,請(qǐng)記住 Web 視圖可能已經(jīng)消失了。使用前進(jìn)行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>#不使用時(shí)清理緩存
當(dāng)您的用戶瀏覽 Internet 時(shí),它會(huì)創(chuàng)建一些緩存,包括緩存的圖像和響應(yīng)。網(wǎng)頁也可能將內(nèi)容存儲(chǔ)在本地存儲(chǔ)中。盡管在大多數(shù)情況下它不會(huì)占用內(nèi)存,但如果您沒有使用緩存,請(qǐng)CleanCache在適當(dāng)?shù)臅r(shí)候調(diào)用以清除它們:
<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>總結(jié)
以上是生活随笔為你收集整理的使用UniWebView时的内存管理的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 1、随机中心裁剪 transforms.
- 下一篇: [html] 写html代码时,如果缺