我在应用程序数据目录中下载了100个图像存储它工作正常 但我已下载更多图像,然后增加堆大小问题即将到来,应用程序已关闭。我已删除所有对象,对象的值定义为null,窗口也关闭但结果相同。
错误:将堆(frag case)增长到14.687MB,用于517197字节分配
喜欢Core android System.gc(); 那么什么是钛的选择
答案 0 :(得分:2)
为什么不使用 android:largeHeap="true"
<android xmlns:android="http://schemas.android.com/apk/res/android">
<manifest>
<application android:largeHeap="true"/>
</manifest>
阅读钛官方文档here
答案 1 :(得分:0)
据我所知,你无法控制垃圾收集。 JavaScript解释器为您完成此任务。
我在一个项目中做了类似的事情(下载大量图片),但也遇到了内存问题。我找到的最佳解决方案是确保垃圾收集是可能的。这样做的原因是JavaScript解释器执行您的代码,如果您遍历所有图像并下载它们,它可能无法在您下载之前进行垃圾收集。这意味着所有临时图像仍然在内存中。
要解决此问题,您需要使用defer
- underscore.js方法或setTimeout
- 函数。从某种意义上说,他们都做的是他们告诉翻译,在此之前运行其他东西是可以的。垃圾收集。
此代码示例(使用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文件中设置一些标签,但根据我的经验,它们并没有多大帮助。
这三篇文章关于&#34;保持应用响应&#34;解释我试图做得很好的观点: