加载图片后,移动应用程序“由于内存不足而无法加载以前的操作”?

时间:2014-02-21 01:39:55

标签: javascript html5 web-applications html5-canvas

我有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);
    });
}}

在我的网络浏览器和手机上,图片已正确加载并显示在画布中,但是我听到一位用户在谷歌浏览器的Razr Maxx HD上运行它,他们会收到“错误:因内存不足而无法加载以前的操作。“我怀疑这个问题不能通过首先读入图像然后在显示之前缩放它来解决,因为即使没有显示,完整的图像也已经被加载到内存中。有没有办法在没有首先加载整个东西的情况下将图像的缩放版本加载到内存中?知道是什么导致了这个问题,因为我能够在我的Galaxy S3上加载大量的图像,并且Galaxy S3具有与Razr Maxx HD相同的RAM量吗?

2 个答案:

答案 0 :(得分:0)

可能取决于用户运行的应用程序有多少内存可用。

一种解决方案是让应用程序请求具有一定宽度的图像,服务器可以返回缩放的图像,这样可以减少内存需求。

答案 1 :(得分:0)

我在三星Galaxy S4上遇到了同样的问题。我在手机上找到了解决方案,自那以后我没有遇到任何问题:

  1. 转到手机上的“设置”。
  2. 在右上角的任务项目中选择更多。
  3. 滚动到“开发者选项”。 - 如果您没有启用开发者选项,请按照步骤1和步骤1进行操作。 2,然后向下滚动到about device并单击它。应显示电话信息,您应向下滚动,直至到达Build Number。接下来要做的就是多次单击Build Number ...(每次点击它时都会显示一个信息栏,告诉你开发者选项需要多少次点击。当你点击BN几次时,DO现在会开放,我们可以继续以上。
  4. 如果您已成功点击开发者选项,则必须向下滚动至D.O菜单底部附近的应用选项。
  5. 如果选择(不要保留活动),请确保取消勾选,确保该框没有勾选,因为它会在离开页面后立即结束每个应用程序或正在运行的操作,因此照片不会加载如果这样做是正确的,那么你现在应该可以上传照片了。