4

我正在尝试将一个视频存储在内存缓存中,视频完成后将其从缓存中删除。并且在播放过程中,该视频文件无法从缓存中删除。

4

2 回答 2

11

每个 Android 应用程序都有自己的有限内存

// Get max available VM memory, exceeding this amount will throw an
// OutOfMemory exception. 
 final int maxMemory = (int) (Runtime.getRuntime().maxMemory() / 1024);

// Use 1/8th of the available memory for this memory cache.
 final int cacheSize = maxMemory / 8;

在普通设备上,每个应用程序至少分配了大约 4 MB (32/8) 32 MB。

在具有 800x480 分辨率的设备上填充图像的全屏网格视图将使用大约 1.5MB(800*480*4 字节)。800*480*4 = 实际图片尺寸

这将在内存中缓存至少大约 2.5 页的图像。即在您的网格视图中,只有 2.5 个图像存储在缓存中...当您向上和向下滚动到 2.5 个图像时,它会从缓存中获取图像...当用户移动到第 3 或第 4 图像..前两个图像缓存被清除,新的下载图像在缓存中。

缓存机制主要用于网格视图列表中图像的平滑滚动。

机制:在列表或网格视图中,当用户向下滚动时,从网络下载第一张图像并存储在缓存中。当用户向上滚动时,如果可用,则从缓存中获取图像。

Android 使用两种机制:

1.LRU Cache(使用内部应用内存) 2.Disk Cache(使用sdcard内存)

磁盘缓存代码是从 Android 操作系统中提取的。这将有限数量的数据存储在 sdcard 中。当插入的数据超过时,最近最少使用的文件被删除并存储新文件。

例如:Facebook Android 使用磁盘缓存。

在应用程序级别或设置>管理应用程序>应用程序名称中清除缓存内存。

每个应用程序都有自己的缓存内存,一个应用程序无法访问其他应用程序的缓存内存。

欲了解更多信息,请访问:

http://developer.android.com/training/displaying-bitmaps/cache-bitmap.html#disk-cache

于 2013-04-02T11:55:49.673 回答
0

从评论中您似乎想要做的是将一个文件存储在永久内存中,然后将其删除:

所以我建议您使用getCacheDir()方法来获取写入文件的位置,然后使用createTempFile()创建一个临时文件,并在不再需要时使用delete()方法。

这是一个 StackOverflow 帖子,展示了如何做到这一点:https ://stackoverflow.com/a/6485850/906362

于 2013-04-02T10:42:11.147 回答