什么是在Android中预先缓存无限数据集的良好内存管理策略?

时间:2013-04-24 17:42:05

标签: android performance caching memory-management

我正在开发一款处理任意数量用户定义视图的Android应用。视图可以非常简单和轻量级,或者它们可能非常复杂并且需要相对较长的时间来实例化。

我希望使用后台线程来预先缓存其中一些视图,以便在用户从一个View切换到另一个View时提高响应能力。我有办法为每个View设置优先级,以确定它们应该添加到缓存中或从缓存中删除的顺序。

我的问题是我需要确定何时内存不足。我想我可以使用MemoryInfo来确定我有多少内存可用。但设置阈值有一个很好的经验法则吗?我应该在什么时候停止缓存其他视图?在什么时候我应该考虑从缓存中删除低优先级的视图?

2 个答案:

答案 0 :(得分:0)

我认为没有普遍的答案。

它通常取决于您的UI的构建方式,您希望用户如何使用“视图”以及屏幕上可以容纳的视图数量(即使它们的高度可变)。

您可以在ListView / Adapter组合中看到Android如何使用创建/预缓存视图的一些模板。

AbsListView implementation

答案 1 :(得分:0)

根据我的阅读,我需要关注的内存限制是Dalvik堆限制,而不是设备上可用的总内存。我使用此过程来获取当前的堆利用率:

Java.Lang.Runtime rt = Java.Lang.Runtime.GetRuntime();
long heapused = rt.TotalMemory() - rt.FreeMemory();
long heapmax = rt.MaxMemory();
double ratio = (double)heapused / (double)heapmax;

我以低利用率积极预先缓存,并且我在高比率下积极清除缓存。