在Android中具有大尺寸的内存缓存中

时间:2012-07-28 08:52:18

标签: android android-ndk

Android开发者,

我试图想出一种实现内存缓存的方法;但与dvm堆大小相比,它的大小会相对较大。我曾计划使用nio和/或Parcel类来序列化我的对象,然后将它们存储在本机内存中;但是我无法预测从它们的字节中重建这些对象的性能。此外,我找不到任何有用的知识,如何使用Parcel和Parcelable进行一些自定义序列化。我知道它适用于android中的IPC;我没有发现检查Parcel.cpp以了解Binder协议的内部结构如此迷人和可行。另一方面,由于dvm堆大小限制,我无法使用LRUCache类,这意味着我将无法将我的java对象存储在dvm堆上。根据我到目前为止所做的网络研究,超越dvm堆大小的唯一方法是告诉我的客户在安装我的应用程序之前根据他们的设备(或者我误解了。如果是这样的话,请做纠正我。)所以他们可以修改他们设备的堆大小选项。

我正在努力避免NDK现在实现缓存,因为我必须最终将我的c / c ++实例传递给java端。

长话短说,任何开发人员都会介意告诉我实现内存缓存的最佳方法,该缓存可能会穿透dvm堆大小限制并快速运行吗?或者至少,如果你能给我发一些链接,pdf,电子书,文档等等,我可以查看一下;那真是太棒了!

谢谢, Ilker GURCAN

1 个答案:

答案 0 :(得分:0)

使用ActivityManager的MemoryClass信息:

  

返回当前设备的近似每应用程序内存类。这可以让您了解应该对应用程序施加的内存限制有多难,以使整个系统最佳运行。返回值以兆字节为单位;基线Android内存类是16(恰好是这些设备的Java堆限制);一些具有更多内存的设备可能会返回24或更高的数字。

因此,例如,您可以将可用内存除以8来构建内存缓存:

ActivityManager activityManager = (ActivityManager)context.getSystemService(Activity.ACTIVITY_SERVICE);
int memoryClass = activityManager.getMemoryClass();
int memCacheSize = memoryClass / 8 * 1024 * 1024; // bytes