2014-06-06 59 views
5

我已经下载应用程序数据目录中的100个图像存储其工作正常 但我已经下载更多的图像,然后增加堆大小问题即将到来,应用程序已关闭。我已删除所有对象,对象的值定义为空和窗口也关闭但结果是一样的。如何清除Android中钛应用程序中的堆大小?

ERROR:生长堆(FRAG情况下),以14.687MB为517197字节分配

像核Android的System.gc(); 那么钛的选择是什么

+0

你能提供的代码? – 0101

回答

0

据我所知,你无法控制垃圾收集。 JavaScript解释器为你做到这一点。

我在一个项目中做了类似的事情(下载大量的图片),并且遇到了内存问题。我发现的最佳解决方案是确保垃圾收集是可能的。原因是JavaScript解释器执行你的代码,如果你遍历所有的图像并下载它们,它可能不会在你完成下载之前做垃圾收集。这意味着所有的临时图像仍将保留在内存中。

要解决此问题,您需要使用或setTimeout功能的defer-方法。从某种意义上说,他们所做的就是他们告诉口译员,在此之前运行其他材料是可以的。垃圾收集。

(使用underscore.js)此代码示例应该给你的总体思路:

var images = [...many entries here...]; 

function downloadImage(index) { 
    //Make sure the index is valid 
    if(index < images.length) { 
    var httpClient = Ti.Network.createHttpClient({ 
     onload: function() { 
     //Save the image to the filesystem. 
     _defer.(downloadImage, ++index); //Download the next image. 
     } 
    }); 

    //Run the HttpClient here. 
    } 
} 

_.defer(downloadImage, 0); //Start the download sequence. 

也有一些标签,你可以在tiapp.xml文件中设置,但在我的经验,他们穿上”帮助很大。

  1. Part 1: The problem
  2. Part 2: The reason
  3. Part 3: The solution
2


“保持你的应用程序响应” 解释我试图让相当不错的点这三篇文章为什么不使用 android:largeHeap="true"

<android xmlns:android="http://schemas.android.com/apk/res/android"> 
<manifest> 
    <application android:largeHeap="true"/> 
</manifest> 

读钛官方文档here

+0

这是我在回答中提到它时想到的标签之一。正如我在那里所说的那样,在我的经历中并没有太大的好处。 – kaspermoerch

+0

我发现这个标签对本地以及钛都有帮助 –

相关问题