2016-09-07 7 views
0

キャッシングに関するドキュメントを見ると、createTempFile()を使用すると思われますが、呼び出しが成功すると常に空のファイルが作成されます。同じ引数で再度呼び出されたとしても、同じファイル名を返すことはありません。Android:アプリの再起動後にキャッシュファイルにアクセス/管理する方法

  1. アプリを再起動しても、一時ファイルを取得する方法はありませんか?

  2. キャッシュからファイルを削除するためのLRUアルゴリズムを実装する場合、ファイル名とタイムスタンプのキー値のペアを持つ通常の(非一時的な)ファイルを作成するのは合理的ですか? (私はアンドロイドがファイルの最終アクセス時刻を更新するとは思わないので)

+1

一時ファイルが必要な場合は、永久保存してください。 – Zoe

+0

@ Polarbear0106ありがとうございます。その声明は簡単なので、私の混乱は解消されました。ドキュメント(https://developer.android.com/training/basics/data-storage/files.html)は、キャッシュ関連のファイルについては、createTempFile()を使用するため、少し誤解を招きます。しかし、彼らは実際に "一時的な"の意味を定義していないか、この方法でファイルをキャッシュすることは、アプリケーションを再オープンした後に使用することを意図していないということを意味していません。 – Kacy

答えて

1

私はたぶんメモリ内のキャッシュファイルを管理していました。キャッシュファイル用に別のディレクトリを作成し、ファイルを管理するためにインメモリLRUシングルトンクラスを使用します。アプリを再起動するたびに、キャッシュディレクトリをスキャンし、ディレクトリの内容からLRUキャッシュを再ロードします。再起動時にキャッシュの統計情報が失われてしまいます。これは、一時停止したときにおそらく処理できないという悪いことです。

メモリ内のキャッシュを管理する方が、キーと値のペアファイルの書き込みと書き換えよりもはるかに高速です。

キャッシュに保持するファイルの数はいくつですか?

+0

おそらく約300-400 MBの価値(キャッシングビデオ)。 「キャッシュファイル用の別のディレクトリを作成する」と言うときは、永続ファイルまたは一時ファイルを使用することをお勧めしますか? – Kacy

+0

キャッシュをアプリの再起動後も存続させたい場合は、永続的なファイルを使用する必要があります。 300以上の動画ファイルは多くの容量を消費する可能性があります。 –

+0

ありがとうございます。 300 MBのビデオではなく、300 MB相当のビデオ:私はシンプルなディスクキャッシュで始めることを決めました。あなたが提案したように、前の状態を維持しようとするのではなく、アプリの再起動時にLRUアルゴリズムをリセットします後で何らかの理由で)。また、ディスクキャッシュのパフォーマンスに満足できない場合は、LRUシングルトンクラスを使用して、提案したようにメモリにキャッシュを確保します。ありがとうございました! – Kacy

関連する問題