2014-02-21 47 views
3

我有一個simple mobile app。它首先提示用戶選擇圖像,然後通過下面的代碼在本地加載並顯示在畫布上:加載圖片後,移動應用程序「由於內存不足而無法加載之前的操作」?

function handleFileSelect(evt) { 
var files = evt.target.files; 
var f = files[0]; 
console.log(evt); 
var ctx = document.getElementById("myCanvas").getContext('2d'), 
img = new Image(), 
f = document.getElementById("uploadbutton").files[0], 
url = window.URL || window.webkitURL, 
src = url.createObjectURL(f); 

img.src = src; 
lastImage = img; 
img.onload = function() 
{ 
    window.requestAnimationFrame(function(){ 
    var w = window.innerWidth; 
    var h = window.innerHeight; 
    ctx.clearRect(0, 0, w, h); 
    ctx.drawImage(lastImage, 0, 0); 
    //url.revokeObjectURL(src); 
    }); 
}} 

在我的網頁瀏覽器,我的手機上,加載圖像,並在畫布上顯示但是,我已經聽到一位用戶使用Google Chrome在Razr Maxx HD上運行它,他們會收到「錯誤:由於內存不足,無法加載之前的操作」。我懷疑這個問題不能通過在圖像中進行首次讀取然後在顯示之前對其進行縮放來解決,因爲即使沒有顯示,完整圖像也將被加載到內存中。有沒有辦法在沒有首先加載整個事物的情況下將縮放版本的圖像加載到內存中?任何想法是什麼導致這個問題,因爲我能夠在我的銀河S3在鉻上加載大量圖像,並且Galaxy S3與Razr Maxx HD具有相同數量的RAM?

回答

0

這可能取決於該應用程序的用戶運行爲多少內存可用。

一種解決方案是具有應用程序請求與一定寬度的圖像,並且服務器可以返回經縮放的圖像,這可以減少內存需求。

+0

圖片在本地選擇。我怎樣才能在本地請求縮放版本的圖像? –

+0

我沒有意識到這一點。有不止一個版本,可能將它們分組到目錄中,而javascript可以選擇最好的版本。用戶在第一次加載或第10次圖像時是否耗盡內存? –

+0

他們跑出了第一張圖片。 –

1

我曾在我的三星Galaxy S4同樣的問題。我在手機上找到了解決方案,因此我沒有任何問題:

  1. 轉到手機上的設置。
  2. 在右上角的任務項中選擇更多。
  3. 滾動到開發人員選項。 - 如果您沒有啓用開發人員選項,請執行步驟1 & 2,然後向下滾動至關於設備並點擊它。手機信息應該顯示出來,你應該向下滾動,直到你看到Build Number。接下來要做的事情是點擊Build Number(幾次)...(每次點擊它時都會顯示一個信息欄,告訴你開發者選項需要多少次點擊,當你多次點擊BN時,DO會立即是開放的,我們可以用上面的繼續。
  4. 如果你點擊進入開發人員選項成功,那麼你必須向下滾動到附近DO菜單底部的應用程序選項。
  5. 如果(不保留活動)被選中,那麼一定要取消它,確保盒子沒有勾號,因爲它會在離開頁面後立即結束每一個應用程序或運行操作,因此照片不會加載到Facebook等原因。如果這樣做是正確的,那麼你應該現在可以上傳照片了。
相關問題