所以
Android的挑战之一就是各种设备规格(特别是设备内存).
我写了我的模型对象,以懒惰的方式广泛地使用Java SoftReferences,因此,VM可以自由修剪当前所使用的数据模型的当前部分,并根据需要进行重构.
然而,SoftReferences在实践中的一个挑战是,它们在几秒钟内就被清除为弱引用,而不是挂起来,直到VM内存不足,所以它们在允许模型修整方面工作得很好,但是它们不能正常工作,因为它通常意味着什么都不记忆.理想情况下,在具有大量内存的设备上,您可以让用户从保存内存中获益.
因此,将SoftReferences与LRU机制组合在一起是常见的,LRU机制保留了对最近引用的对象的硬指针.这当然不是理想的,因为它假定你有足够的内存用于所有这些几乎不被引用的对象.
这也是一个挑战,知道什么是LRU的良好默认.
在一个完美的世界中,Android会使用它的低内存回调作为提示(所以我可以从一个小的LRU开始,并定期碰撞,直到低内存回调开始发生,然后关闭,以找到一个很好的设备的价值),但在我的经验中,这种回调似乎与实际的VM内存压力一致.
有没有人遇到过一种合理的方式来检测您的数据模型是否在特定设备上使用太多的内存?