私はアンドロイドで非常に奇妙な問題に遭遇しました:
私のアプリでは、キャッシュ ディレクトリからファイルをアップロードします。アプリがファイルをアップロードしているときに、ユーザーが cleanmaster のようなクリーナー アプリを使用してアプリのキャッシュ ディレクトリをクリアすると、すべてのファイルが削除されますが、アップロード タスクはまったく停止せず、後でデータを失うことなく正常に完了します。さらに、これらの「ソース ファイルなしタスク」がまだアップロードしている間、キャッシュ ディレクトリにアクセスできなくなりました。たとえば、キャッシュ ディレクトリに新しいファイルを作成しようとすると、「ebusy」エラーが発生します。
私のアプリは FileInputStream を使用して、次のようにアップロード タスクでデータ フォーム ファイルを開き、読み取ります。</p>
InputSream in = new FileInputStream(file);
byte[] buffer = new byte[4 * 1024];
int bytes;
while ((bytes = in.read(buffer)) != -1) {
netOutputStream.write(buffer, 0, bytes);
}
in.close();
FileInputStream によって開かれている間にシステムがファイルをキャッシュしていると思いますが、キャッシュを無効にするにはどうすればよいですか? 私が欲しいのは、ファイルが削除された場合、ストリームからの読み取りエラーが発生し、アップロードタスクが停止することです。
私の質問:
- ソースファイルを削除しても FileInputSream を読み取ることができる理由
- キャッシュディレクトリがロックされているのはなぜですか?
- 私の場合の解決策はありますか?