簡短問題重新啓動iOS設備時發佈了什麼?
我有一個錯誤,只有當我重新啓動我的設備時纔會消失。我想知道什麼是重新啓動iOS設備時才能知道我的錯誤是什麼。 發佈我的緩存和我的RAM並沒有幫助修復我的錯誤,所以我不知道還有什麼可以在短時間內修復我的錯誤。
背景
我有使用WebGL和BabylonJS一個Web應用程序。它在除iOS之外的所有設備和所有瀏覽器上工作得很好。對於Safari,我總是會收到錯誤消息「此網頁出現問題,因此重新加載」。
它發生在運行iOS 10.3.3的iPad Air 2(2Go RAM)上,但是我看到了每個iOS設備上可能出現的錯誤。這就是爲什麼我認爲它只與iOS相關。我知道關於iOS的資源限制:https://stackoverflow.com/a/22193143/5053300
我試圖調試幾個月,錯誤出現隨機,有時很快,有時慢。沒有什麼一致的,所以完全不可能調試。
最好的猜測是它是一個內存問題,因爲崩潰似乎每次都會顯得更快。並且因爲錯誤消息總是與內存問題相關聯。
我懷疑紋理和renderTargetTextures採取越來越多的內存(但我不明白爲什麼它不會被釋放,我不保留無用的引用)。
但有些事情我確定:當我重新啓動我的設備時,它總是第一次工作(直到我重新加載一次,然後開始下降螺旋)。
如果我清理緩存(通過設置 - > Safari)和我的RAM(當我們在關閉屏幕時按下home按鈕),錯誤仍然存在。但是,如果我重新啓動我的設備,它會消失。 內存中的東西被釋放,我想知道什麼。
但我也可能是完全錯誤的,它可能是內存以外的東西,我願意接受你的所有建議。
在此先感謝,它讓我瘋狂了好幾個月!
UPDATE
這是JS堆的樣子:
更新2
一個scene asking for 90 renderTargetTextures(379x890),每幀做iOS上的工作。 如果我不要求任何renderTargetTextures,我的應用程序就會工作。但是如果我只是要求每一幀有一個小的renderTargetTexture,它會快速崩潰。 從這個觀察中我能得出什麼結論?它是否證實或否認記憶問題的想法?
更新3
有沒有線索下面的代碼確實是問題的原因,但評論/取消註釋它generaly使消失/出現的bug。
var texture = generateTexture();
function generateTexture() {
var rt1 = new BABYLON.RenderTargetTexture("rt1", { width: scene.getEngine().getRenderWidth(), height: scene.getEngine().getRenderHeight() }, scene, false, true, scene.getEngine().TEXTURETYPE_UNSIGNED_BYTE, false);
rt1.wrapU = BABYLON.Texture.CLAMP_ADDRESSMODE;
rt1.wrapV = BABYLON.Texture.CLAMP_ADDRESSMODE;
rt1.renderList.push(sphere);
rt1.onBeforeRender = function() {
sphere.material = std1;
};
scene.customRenderTargets.push(rt1);
return rt1;
}
我可以堅持,該代碼在link posted in update 2工作,所以我不認爲這個代碼是相關的事實。唯一的一點是,評論這部分的應用程序似乎刪除了隨機錯誤。 此代碼要求3D引擎在呈現到屏幕之前呈現爲一箇中間紋理。所以這段代碼會影響每一幀。 在鏈接中,我要求引擎在90次渲染到紋理之前渲染到屏幕。
UPDATE 4:問題解決
的問題並不取決於什麼是iOS上的重啓發行,所以我不能回答我自己的問題。但我可以說iOS不喜歡動態照明。 從現在起,我們所有的項目都將限制在iOS設備上。
更多的燈光,更多的計算每幀。對於iOS而言,殺死在短時間內要求太多內存的應用程序太多了。
請顯示一些代碼,以便輕鬆調查問題。 – the4kman
這是不可能的孤立錯誤,它隨機出現。代碼太大了。這就是爲什麼我不要求任何人修復我的錯誤,因爲我不能顯示任何相關的代碼。抱歉。 由於它是一個WebGL應用程序,每幀都會生成和釋放紋理。這可以解釋爲什麼內存問題隨機出現,並不總是在同一時刻。 – Nicolas
只有幫助,儘可能嘗試用戶配置文件並獲得內存泄漏。 –