我已经下载应用程序数据目录中的100个图像存储其工作正常 但我已经下载更多的图像,然后增加堆大小问题即将到来,应用程序已关闭。我已删除所有对象,对象的值定义为空和窗口也关闭但结果是一样的。如何清除Android中钛应用程序中的堆大小?
ERROR:生长堆(FRAG情况下),以14.687MB为517197字节分配
像核Android的System.gc(); 那么钛的选择是什么
我已经下载应用程序数据目录中的100个图像存储其工作正常 但我已经下载更多的图像,然后增加堆大小问题即将到来,应用程序已关闭。我已删除所有对象,对象的值定义为空和窗口也关闭但结果是一样的。如何清除Android中钛应用程序中的堆大小?
ERROR:生长堆(FRAG情况下),以14.687MB为517197字节分配
像核Android的System.gc(); 那么钛的选择是什么
据我所知,你无法控制垃圾收集。 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文件中设置,但在我的经验,他们穿上”帮助很大。
:
“保持你的应用程序响应” 解释我试图让相当不错的点这三篇文章为什么不使用 android:largeHeap="true"
<android xmlns:android="http://schemas.android.com/apk/res/android">
<manifest>
<application android:largeHeap="true"/>
</manifest>
读钛官方文档here
这是我在回答中提到它时想到的标签之一。正如我在那里所说的那样,在我的经历中并没有太大的好处。 – kaspermoerch
我发现这个标签对本地以及钛都有帮助 –
你能提供的代码? – 0101