- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
有人在 DiskLruCache 上工作过吗?
http://developer.android.com/training/displaying-bitmaps/cache-bitmap.html
提供了一个使用这种缓存方法的例子。但我观察到 4.0 源代码中 DiskLruCache 的实现没有定义的方法。知道如何使用它吗?
最佳答案
您可以使用 Picasso作为图像加载器。
或者
这就是我所做的:
我使用 DiskLruCache (the one from Jake Wharton) 创建了一个名为 DiskLruImageCache 的类开发指南上的简单实现中的对象和相同的方法(有效地显示位图):
public class DiskLruImageCache {
private DiskLruCache mDiskCache;
private CompressFormat mCompressFormat = CompressFormat.JPEG;
private int mCompressQuality = 70;
private static final int APP_VERSION = 1;
private static final int VALUE_COUNT = 1;
private static final String TAG = "DiskLruImageCache";
public DiskLruImageCache( Context context,String uniqueName, int diskCacheSize,
CompressFormat compressFormat, int quality ) {
try {
final File diskCacheDir = getDiskCacheDir(context, uniqueName );
mDiskCache = DiskLruCache.open( diskCacheDir, APP_VERSION, VALUE_COUNT, diskCacheSize );
mCompressFormat = compressFormat;
mCompressQuality = quality;
} catch (IOException e) {
e.printStackTrace();
}
}
private boolean writeBitmapToFile( Bitmap bitmap, DiskLruCache.Editor editor )
throws IOException, FileNotFoundException {
OutputStream out = null;
try {
out = new BufferedOutputStream( editor.newOutputStream( 0 ), Utils.IO_BUFFER_SIZE );
return bitmap.compress( mCompressFormat, mCompressQuality, out );
} finally {
if ( out != null ) {
out.close();
}
}
}
private File getDiskCacheDir(Context context, String uniqueName) {
// Check if media is mounted or storage is built-in, if so, try and use external cache dir
// otherwise use internal cache dir
final String cachePath =
Environment.MEDIA_MOUNTED.equals(Environment.getExternalStorageState()) ||
!Utils.isExternalStorageRemovable() ?
Utils.getExternalCacheDir(context).getPath() :
context.getCacheDir().getPath();
return new File(cachePath + File.separator + uniqueName);
}
public void put( String key, Bitmap data ) {
DiskLruCache.Editor editor = null;
try {
editor = mDiskCache.edit( key );
if ( editor == null ) {
return;
}
if( writeBitmapToFile( data, editor ) ) {
mDiskCache.flush();
editor.commit();
if ( BuildConfig.DEBUG ) {
Log.d( "cache_test_DISK_", "image put on disk cache " + key );
}
} else {
editor.abort();
if ( BuildConfig.DEBUG ) {
Log.d( "cache_test_DISK_", "ERROR on: image put on disk cache " + key );
}
}
} catch (IOException e) {
if ( BuildConfig.DEBUG ) {
Log.d( "cache_test_DISK_", "ERROR on: image put on disk cache " + key );
}
try {
if ( editor != null ) {
editor.abort();
}
} catch (IOException ignored) {
}
}
}
public Bitmap getBitmap( String key ) {
Bitmap bitmap = null;
DiskLruCache.Snapshot snapshot = null;
try {
snapshot = mDiskCache.get( key );
if ( snapshot == null ) {
return null;
}
final InputStream in = snapshot.getInputStream( 0 );
if ( in != null ) {
final BufferedInputStream buffIn =
new BufferedInputStream( in, Utils.IO_BUFFER_SIZE );
bitmap = BitmapFactory.decodeStream( buffIn );
}
} catch ( IOException e ) {
e.printStackTrace();
} finally {
if ( snapshot != null ) {
snapshot.close();
}
}
if ( BuildConfig.DEBUG ) {
Log.d( "cache_test_DISK_", bitmap == null ? "" : "image read from disk " + key);
}
return bitmap;
}
public boolean containsKey( String key ) {
boolean contained = false;
DiskLruCache.Snapshot snapshot = null;
try {
snapshot = mDiskCache.get( key );
contained = snapshot != null;
} catch (IOException e) {
e.printStackTrace();
} finally {
if ( snapshot != null ) {
snapshot.close();
}
}
return contained;
}
public void clearCache() {
if ( BuildConfig.DEBUG ) {
Log.d( "cache_test_DISK_", "disk cache CLEARED");
}
try {
mDiskCache.delete();
} catch ( IOException e ) {
e.printStackTrace();
}
}
public File getCacheFolder() {
return mDiskCache.getDirectory();
}
}
Utils源代码为:
public class Utils {
public static final int IO_BUFFER_SIZE = 8 * 1024;
private Utils() {};
public static boolean isExternalStorageRemovable() {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.GINGERBREAD) {
return Environment.isExternalStorageRemovable();
}
return true;
}
public static File getExternalCacheDir(Context context) {
if (hasExternalCacheDir()) {
return context.getExternalCacheDir();
}
// Before Froyo we need to construct the external cache dir ourselves
final String cacheDir = "/Android/data/" + context.getPackageName() + "/cache/";
return new File(Environment.getExternalStorageDirectory().getPath() + cacheDir);
}
public static boolean hasExternalCacheDir() {
return Build.VERSION.SDK_INT >= Build.VERSION_CODES.FROYO;
}
}
记得放
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
在您的 AndroidManifest.xml 上
我通过阅读 this code 发现了这种方法以及来自 Jake Wharton 的 DiskLruCache 的 javadoc
关于android - 在 android 4.0 中使用 DiskLruCache 不提供 openCache 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10185898/
我在这个实现中使用 JakeWharton 的 DiskLruCache:Using DiskLruCache in android 4.0 does not provide for openCach
我是 SO 新手,也是 Android 编程新手!如果问题很微不足道,请原谅我。 无论如何,我正在尝试创建一个图库应用程序,它将显示文件夹中所有媒体文件(视频和图片)的缩略图。我的应用程序运行良好,除
这是我正在关注的磁盘缓存教程。我已将源代码下载到 DiskLruCache,但源代码中不存在本示例中使用的所有方法。 http://developer.android.com/training/dis
我想在我基于 API 级别 7+ 的 Android 应用程序中使用 Jake Wharton 的 DiskLruCache。我会在我的 ListView 中使用它来缓存 SdCard 上下载的图像,
我想在我的项目中使用 DiskLruCache,如 Caching Bitmaps 中所述。 ,但无法导入正确的库。 在哪里可以找到包含此类的 jar? 按照 similar questions 中的
我正在使用 Jake Wharton's DiskLruCache图书馆。 我对应用程序性能、缓存策略以及在 View 中和整个应用程序中使用缓存感到好奇。大多数时候,图像不会改变。 例如,假设我的服
我正在尝试使用 jake wharton DiskLruCache 库实现基于磁盘的图像 lru 缓存。 link to library .我正在使用 here 中的代码 fragment . 我遇到
我收到此错误 java.lang.IllegalArgumentException:键必须匹配正则表达式 [a-z0-9_-]{1,64}:“mision_imposible_–_rogue_nati
我正在尝试在我的 Android 应用程序中使用 Jake Wharton 的 DiskLruCache,但我似乎无法弄清楚如何使用缓存正确序列化和反序列化对象。在基本命令行 Java 程序中使用以下
这与 this 有关关于 Volley 图像缓存的问题。所以,现在我想实现 DiskLruCache,但我不确定该怎么做。 我从 github 下载了 Jar 文件并将其添加到我的项目中。 接下来我该
我正在使用DiskLruCache缓存图像的 url。我使用 AsyncTask 下载图像像这样: new AsyncTask() { String path = null;
在我的 Android 应用程序中,我想在磁盘上缓存图像,然后这些图像将显示在 WebView 中。 ,为此我需要通过某种路径或 URI 访问文件。 (为了使用 。)我发现的所有缓存实现都不提供对绝
我正在尝试在一个新的 Android 项目中测试这个缓存库。 当我运行项目时,我得到这个 Logcat: 01-24 03:45:31.109: E/AndroidRuntime(1983): FAT
有人在 DiskLruCache 上工作过吗? http://developer.android.com/training/displaying-bitmaps/cache-bitmap.html 提
我正在尝试构建 Xamarin.Forms 项目,但出现此错误: Severity Code Description Project File Line Suppression
我是一名优秀的程序员,十分优秀!