2016-04-06 27 views
0

私のアプリケーションが閉じられたときにファイルを削除したいと思います。私は自分の活動の方法で削除を実行します。onDestroyしかし、ファイルが削除されているかどうかを確認するときに、アプリケーションを終了した後、ファイルはまだそこにあります。アプリケーションが閉じられたときにファイルを削除する方法

ここに私のコードは、これまでのようになります。

@Override 
protected void onDestroy() { 

    File file = new File(Environment.getExternalStorageDirectory().getPath(), "fileName.txt"); 
    if(file.exists()){ 
     file.delete(); 
    } 

    super.onDestroy(); 
} 

EDIT:あなたはonDestroyに頼るべきではないです

try { 
     file = File.createTempFile(Environment.getExternalStorageDirectory().getPath(), fileName); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
+0

https://docs.oracle.com/javase/7/docs/api/java/io/File.html#deleteOnExit%28%29 – Kenney

+0

Javaでは、一時ファイルを作成できます。http:// stackoverflow.com/a/16691560/4065876 Androidでこれが動作するかどうかはわかりません。 –

+0

@Kenney、 'delete()'メソッドを 'deleteOnExit()'に置き換えましたが、動作しませんでした。 –

答えて

1

:一時ファイルの作成に関するコードのスニペットを表示するように尋ねメソッドが呼び出されます(ライフサイクルがこの段階に到達する前に、システムがプロセスを中断する可能性があります)。 一時ファイルに関連して、私はそのようなファイルを保つために、一時的なフォルダを使用することをお勧めだろうが、それは合理的な範囲内の一時ファイルのサイズを維持するためにあなたの責任にまだある(〜1メガバイト)を

UPDATE(スニペット)
@EbadSaghar、ファイル名プレフィックスとしてExternalStorageDirectoryへのフルパスを提供しようとしています。 しかし、とにかくアプローチは少し異なっています:File.createTempFile関数は、ランダムな名前を使って特別な一時ファイルディレクトリにファイルを作成する以外は何もしません。したがって、システムに、機能に一時フォルダを提供するために、私たちの責任ではまだこのファイルは削除することが適切であることを知っている:

public File getTempFile(Context context, String url) { 
    File file; 
    try { 
     String fileName = Uri.parse(url).getLastPathSegment(); 
     file = File.createTempFile(fileName, null, context.getCacheDir()); 
    catch (IOException e) { 
     // Error while creating file 
    } 
    return file; 
} 

しかしcachedDirが内部ストレージである、それは他のアプリにはできないことを意味しますここにファイルを書きます。したがって、FileProviderを実装して、一時ファイルのURIを提供する必要があります。

+0

一時ファイルは有望だ​​と思われますが、カメラのサービスで撮影したファイルを使用しているので一時ファイルを使用することはできません。 –

+0

なぜあなたはできないと思いますか? –

+0

カメラサービスがイメージバイト配列をそのファイルに書き込んでいるときにnull例外エラーが発生しました。ファイルは実際には一時ファイルとして作成されました –

0

Applicationを試すことができます。ファイルを削除するには、onTerminate()を上書きすることができます。

+1

[docs](http://developer.android.com/reference/android/app/Application.html#onTerminate()): 'このメソッドは、エミュレートされたプロセス環境で使用するためのものです。これは、Android搭載デバイスでは決して呼び出されません。プロセスを単に殺すだけでプロセスが削除されます。このとき、ユーザコード(このコールバックを含む)は実行されません。 ' –

+0

はい。そのとおりです。訂正ありがとう! –

0

特にファイルを削除したいので、ファイルを作成する方法にいくつかの潜在的な問題があります。この方法で、アプリケーションのローカルキャッシュにファイルを保存することもできます。

// get the cache directory for our present `Activity`; 
// referred to by `context` 
File directory = context.getCacheDir(); 

File file = File.createTempFile("prefix", "extension", directory); 

[Docs]ファイルは、あなたのアプリにプライベートになり、デバイスはストレージが不足している場合、Androidはそれらを取り除くことができます。あなたはこれに頼るべきではありませんが。

Android Activity Life-cycleをご覧ください。したがって、セッションで作成したファイルのトラックを保持するとします。 onDestroy()でこれらのファイルを削除してください。このリストをSharedPrefなどで保存することをお勧めします。理由?そのonDestroy()は、地球上で最も信頼できるものではありません。ファイルが保存されている場合は、次回にonDestroy()が呼び出されたときにファイルを削除できます(存在する場合)。

個人的には、私はたぶんこの目的でonDestroy()を使用しません。多分onStop()がより信頼できるでしょう。あなたのデザインは、あなたが最高の裁判官になるでしょう。 :)

関連する問題