2014-02-21 18 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等原因。如果这样做是正确的,那么你应该现在可以上传照片了。
相关问题