-4

我使用内部数据(应用程序的私有数据)来保存数据。

但是,如果设备存储空间不足,如何在保存前检查存储空间是否已满?如果写入文件的数据非常大,导致设备的存储空间变满,我该如何检查并通知用户/防止应用程序显示强制关闭对话框?

Android 系统是否在这个问题上做任何事情(例如显示一条消息告诉用户设备上没有更多空间)?

主要关注的是确保检查发生在适用的驱动器上;如果应用程序已移至 SD 卡或其他一些外部存储单元,则应根据剩余内存检查该驱动器

示例场景:设备剩余 238KB。有 10 个文件保存数据。每个文件为 30-40KB。假设平均为 35KB/file,可以写入 6 个文件,而最后 4 个不能。我该如何处理诸如此类的问题?

4

2 回答 2

7

您已经提出了几个问题,但您需要做的只是在继续任何文件写入操作之前简单检查一下是否有可用的存储内存。

您可以使用此实用程序方法快速检查设备上的可用存储空间,

 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()方法获取文件的大小。它将返回每个文件的大小(以字节为单位)。

您需要做的就是将您打算写入的文件的大小与可用的存储内存进行比较。如果您的文件大小小于可用的总存储空间,您可以继续写入文件。

于 2017-03-12T14:47:05.227 回答
1

如何在保存之前检查内存是否已满?

给定您感兴趣的分区上某个位置的路径,用于StatFs找出可用磁盘空间的数量。

Android 系统是否在这个问题上做任何事情(例如显示一条消息告诉用户设备上没有更多空间)?

AFAIK,它不会实时这样做。IOW,可能会不时通知用户他们的设备开始空间不足,但这些消息的时间与您的应用程序的运行无关。这是一个设备范围的警告,而不是“OMG,应用程序即将写入文件!” 警告。

于 2017-03-12T14:45:17.957 回答