您好我在Android上使用guava进行图像的简单mem缓存
memCache = CacheBuilder.newBuilder()
.maximumWeight(Runtime.getRuntime().maxMemory()/MEMORY_POOL)
.weigher(new Weigher<String, Bitmap>() {
@SuppressLint("NewApi")
public int weigh(String url, Bitmap bitmap) {
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.HONEYCOMB_MR1) {
return bitmap.getRowBytes() * bitmap.getHeight();
} else {
return bitmap.getByteCount();
}
}
})
.removalListener(new RemovalListener<String, Bitmap>() {
@Override
public void onRemoval(RemovalNotification<String, Bitmap> objectObjectRemovalNotification) {
final Bitmap bitmap = objectObjectRemovalNotification.getValue();
if (bitmap != null && !bitmap.isRecycled()) {
Log.debug("Cache: recycling bitmap");
bitmap.recycle();
}
}
})
.build();
从缓存中删除项目时,会先删除最长时间未使用的项目。我想改变它,以便删除最重量的第一件物品。有可能吗?
答案 0 :(得分:1)
您可以尝试使用Ehacache执行此任务。所需的功能可以通过以下方式实现:
Element
类的isExpired()
方法(并在其中提供您的权重逻辑)。然后,不是将通常的Element
添加到缓存中,而是添加扩展类的实例。CacheEventListener
。它可能需要比Guava更多的配置,但仍然可以工作。