我使用内部数据(应用程序的私人数据)来保存数据。
但是,如果设备存储空间不足,在保存之前如何检查存储空间是否已满?如果写入文件的数据非常大,导致设备的存储空间变满,我该如何检查并通知用户/阻止应用程序显示强制关闭对话框?
Android系统是否在此问题上做了任何事情(例如,显示一条消息,告诉用户设备上没有更多空间)?
主要关注的是确保在适用的驱动器上进行检查;如果应用程序已被移动到SD卡或其他外部存储单元,那么就剩余内存而言应该检查的驱动器
示例方案:设备剩余238KB。有10个文件可以保存数据。每个文件是30-40KB。假设平均值为35KB /文件,则可以写入6个文件,而最后4个文件则不能。我该如何处理这类问题?
答案 0 :(得分:3)
您已经提出了几个问题,但在继续进行任何文件写入操作之前,您需要做的只是简单检查以查看是否有可用的存储空间。
您可以使用此实用程序方法快速检查设备上的空闲存储空间,
public static long getAvailableInternalMemorySize() {
File path = Environment.getDataDirectory();
StatFs stat = new StatFs(path.getPath());
long blockSize, availableBlocks;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR2) {
blockSize = stat.getBlockSizeLong();
availableBlocks = stat.getAvailableBlocksLong();
} else {
blockSize = stat.getBlockSize();
availableBlocks = stat.getAvailableBlocks();
}
return availableBlocks * blockSize;
}
如您所知,您可以使用文件的length()
方法获取文件的大小。它将以字节为单位返回每个文件的大小。
您需要做的就是将要编写的文件的大小与可用的存储内存进行比较。如果文件大小小于可用的总存储空间,您可以继续编写文件。
答案 1 :(得分:1)
如何在保存之前检查内存是否已满?
Use StatFs
找出可用磁盘空间量,给定您感兴趣的分区上某个位置的路径。
Android系统是否在此问题上做了任何事情(例如,显示一条消息,告诉用户设备上没有更多空间)?
AFAIK,它不会实时这样做。 IOW,用户可能会不时收到有关他们的设备开始变低空间的通知,但这些消息的时间安排与应用程序的运行无关。这是一个设备范围的警告,而不是应用程序即将编写文件的OMG!"警告。