-4

内部データ(アプリのプライベートデータ)を使用してデータを保存します。

ただし、デバイスのストレージが不足している場合、保存する前にストレージがいっぱいかどうかを確認するにはどうすればよいですか? また、ファイルに書き込まれたデータが非常に大きく、デバイスのストレージがいっぱいになった場合、これを確認してユーザーに通知したり、アプリが強制終了ダイアログを表示しないようにするにはどうすればよいですか?

Android システムはこの問題に対して何かしますか (たとえば、デバイスに空き容量がないことをユーザーに伝えるメッセージを表示します)?

主な関心事は、該当するドライブでチェックが行われることを確認することです。アプリが SD カードまたはその他の外部ストレージ ユニットに移動されている場合は、そのドライブのメモリ残量を確認する必要があります。

シナリオ例:デバイスには 238KB が残っています。データが保存されるファイルは 10 個あります。各ファイルは 30 ~ 40KB です。平均が 35KB/ファイルであると仮定すると、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 システムはこの問題に対して何かしますか (たとえば、デバイスに空き容量がないことをユーザーに伝えるメッセージを表示します)?

私の知る限り、リアルタイムではそうしません。IOW、ユーザーは、デバイスの空き容量が少なくなり始めていることを時々通知される場合がありますが、これらのメッセージのタイミングは、アプリの実行に何らかの形で関連付けられているわけではありません. これはデバイス全体の警告であり、「OMG そのアプリがファイルを書き込もうとしています!」ではありません。警告。

于 2017-03-12T14:45:17.957 に答える