2016-11-16 89 views
0

我正在查看docs并试图了解LruCache是​​否与我的应用程序的其余部分竞争堆资源,或者如果它实际使用某种精细的磁盘交换机制。LruCache受Android应用程序内存空间的限制吗?

我问的原因是我想为缓存分配大量内存(比如说一个演出),这样如果设备失去了互联网连接,大量的图像数据可以在本地持续存在。但是,如果LruCache受应用程序堆内存分配大小的限制,这显然不起作用。

我希望有人可以指出我有关这个功能如何工作的更详细的文档,如果这不是正确的功能来处理这种需求,如果我需要推出自己的或如果有一个Android本机磁盘交换内存类,我忽略了可能应该结合LruCache(或完全自己使用?)

回答

2

我在看文档,并试图了解如果LruCache是​​争夺堆资源我的应用程序的其余部分,或者实际上是使用某种精细的磁盘交换机制。

它正在使用您的应用程序的堆空间。您可以看到the LRUCache source code来确认这一点。

但是,如果LruCache受应用程序堆内存分配的大小限制,这显然不起作用。

正确。

如果我需要推出自己的,或者如果有那我俯瞰

的Android原生磁盘交换内存类实在是没有“磁盘交换记忆”的概念,在Android应用水平,甚至很少的设备甚至在操作系统级别上实现它。

+0

那么......如果我想要坚持一些大块的本地图像,而不会冒着在本地存储上消耗超过N块的风险,那么什么(如果有的话)是我的追索权?我完全不幸运? –

+0

@GeniaS .:“我想要保留大量本地图像,而不会冒着在本地存储上消耗超过N块的风险?” - 我不知道你认为“本地存储”是什么意思。如果你指的是磁盘空间,它不会像“磁盘交换内存”以某种方式奇迹般地使用没有磁盘空间。所以,如果你的想法是“我会将数据存储在内存中,以节省磁盘空间”,这有点倒退,在这种情况下,你绝对不走运。 – CommonsWare

+0

@GeniaS .:通常,在Android中,您首先使用内存缓存。如果您需要更多空间,或者希望高速缓存能够在进程终止(例如Web浏览器高速缓存)后生存,则可以使用由磁盘支持的双层高速缓存。您仍然限制您使用的磁盘空间量,因此用户不会对您生气。如果你有更多的东西,使用LRU和类似的算法来最大化缓存值,并最小化你需要从原始数据源(例如网络)再次获取的内容。 – CommonsWare

相关问题