0

嗨,Android 开发者,

我正在尝试找出一种实现内存缓存的方法;但与 dvm 堆大小相比,它的大小会比较大。我曾计划使用 nio 和/或 Parcel 类来序列化我的对象,然后将它们存储在本机内存中;但是,我确实无法预测从它们的字节重建这些对象的性能。此外,我找不到任何有用的东西来教如何使用 Parcel 和 Parcelable 进行一些自定义序列化。我知道它适用于 android 中的 IPC;而且我没有发现检查 Parcel.cpp 以了解 Binder 协议的内部结构如此迷人和可行。另一方面,由于 dvm 堆大小限制,我也无法使用 LRUCache 类,这意味着我将无法将我的 java 对象原样存储在 dvm 堆上。

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

长话短说,有没有开发人员介意告诉我实现内存缓存的最佳方法,它可以突破 dvm 堆大小限制并快速运行?或者至少,如果你能给我一些链接、pdf、电子书、文档等,让我检查一下;那真的很棒!

谢谢, Ilker GURCAN

4

1 回答 1

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
于 2012-07-28T09:05:22.427 回答