如何在android中清除Tianium应用程序中的堆大小增长?
我已经下载了100个图像存储在应用程序数据目录中,工作正常 但我下载了更多的图像,然后堆大小增长问题就来了,应用程序关闭了。我删除了所有对象,对象的值定义为null,窗口也关闭了,但结果是一样的 错误:为517197字节分配将堆(frag大小写)增长到14.687MB 与核心android System.gc()类似;如何在android中清除Tianium应用程序中的堆大小增长?,android,titanium,titanium-mobile,Android,Titanium,Titanium Mobile,我已经下载了100个图像存储在应用程序数据目录中,工作正常 但我下载了更多的图像,然后堆大小增长问题就来了,应用程序关闭了。我删除了所有对象,对象的值定义为null,窗口也关闭了,但结果是一样的 错误:为517197字节分配将堆(frag大小写)增长到14.687MB 与核心android System.gc()类似; 那么钛的选项是什么呢?据我所知,您无法控制垃圾收集。JavaScript解释器会为您完成这项工作 我在一个项目中做了类似的事情(下载了很多图片),也遇到了内存问题。我发现的最佳解
那么钛的选项是什么呢?据我所知,您无法控制垃圾收集。JavaScript解释器会为您完成这项工作 我在一个项目中做了类似的事情(下载了很多图片),也遇到了内存问题。我发现的最佳解决方案是确保垃圾收集是可能的。原因是JavaScript解释器执行您的代码,如果您循环浏览所有图像并下载它们,则在下载完成之前,它可能无法进行垃圾收集。这意味着所有临时图像仍将在内存中 要处理此问题,您需要使用的
defer
-方法或setTimeout
-函数。从某种意义上说,他们都是这样做的,他们告诉解释器在此之前运行其他东西是可以的,例如垃圾收集
此代码示例(使用下划线.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.
var images=[…此处有许多条目…];
函数下载图像(索引){
//确保索引有效
如果(索引
在tiapp.xml文件中还可以设置一些标记,但根据我的经验,它们没有多大帮助
这三篇关于“保持应用程序响应”的文章解释了我试图很好地表达的观点: 为什么不使用
你能提供代码吗?这是我在回答中提到它时想到的标签之一。正如我在那里所说的,根据我的经验,这个标签并没有多大用处。我发现这个标签很有用,无论是在土生土长的还是钛制的
<android xmlns:android="http://schemas.android.com/apk/res/android">
<manifest>
<application android:largeHeap="true"/>
</manifest>