2016-04-06 15 views
0

Ich möchte eine Datei löschen, wenn meine App geschlossen wird. Ich führe die Löschung in der onDestroy Methode meiner Tätigkeit durch. Aber wenn ich nach dem Schließen der App überprüfe, ob die Datei gelöscht wurde, ist die Datei immer noch da.So löschen Sie eine Datei, wenn die Anwendung geschlossen wird

Hier ist, was mein Code wie bisher aussieht:

@Override 
protected void onDestroy() { 

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

    super.onDestroy(); 
} 

EDIT: Auf die Frage Code-Snippet zeigen in Bezug auf die Erstellung einer temporären Datei:

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

In Java können Sie eine temporäre Datei erstellen: http: // stackoverflow.com/a/16691560/4065876. Ich weiß nicht, ob das bei Android funktioniert. –

+0

@Kenney, ich ersetzte meine 'delete()' Methode durch 'deleteOnExit()', aber es hat nicht funktioniert. –

Antwort

1

Sie sind nicht auf onDestroy verlassen Methode, die aufgerufen werden soll (das System kann Ihren Prozess unterbrechen, bevor der Lebenszyklus diese Stufe erreicht). Ich würde vorschlagen, temporäre Ordner zu verwenden, eine solche Datei zu halten, aber es ist immer noch in Ihrer Verantwortung Größe von temporären Dateien innerhalb vernünftiger Grenzen zu halten (ca. 1 mb)

UPDATE (in Bezug auf die temp-Datei Snippet)
@EbadSaghar, Sie versuchen, vollständigen Pfad zu ExternalStorageDirectory als Dateinamen-Präfix bereitzustellen. Aber irgendwie ist der Ansatz ein bisschen anders: die File.createTempFile Funktion tut nichts außer dem Erstellen einer Datei in speziellen Temp-Datei-Verzeichnis mit zufälligen Namen. So ist es immer noch in unserer Verantwortung liegt, einen temp-Ordner auf die Funktion zur Verfügung zu stellen, um das System weiß, dass diese Datei zu löschen geeignet ist:

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; 
} 

Aber die cachedDir ist interner Speicher, bedeutet dies, dass andere Anwendungen können nicht Schreiben Sie Dateien hier, so sollten Sie FileProvider implementieren, um einen URI Ihrer temporären Datei bereitzustellen.

+0

Tempakte vielversprechend zu sein scheinen, aber ich glaube nicht, dass ich eine temporäre Datei verwenden kann, da ich die Dateien verwenden als Bilder von einer Kamera 'genommen service' –

+0

Warum glauben Sie nicht? –

+0

ich einen Null-Ausnahmefehler immer, wenn der Kamera-Dienst wurde auf diese Datei das Bild Byte-Array zu schreiben, wurde die Datei in der Tat als eine temporäre Datei erstellt –

0

Sie können versuchen, Application zu verwenden. Sie können onTerminate() außer Kraft setzen, um Ihre Datei zu löschen.

+1

Von dem [docs] gemacht worden (http://developer.android.com/reference/android/app/Application.html#onTerminate()): 'Diese Methode ist für den Einsatz in emulierten Prozessumgebungen. Es wird nie auf einem Produktions-Android-Gerät aufgerufen werden, wo Prozesse entfernt werden, indem sie einfach getötet werden; kein Benutzercode (einschließlich dieses Rückrufs) wird dabei ausgeführt. " –

+0

Ja. Das ist richtig. Danke für die Korrektur ! –

0

Ich habe bei der Erstellung einer Datei einige potenzielle Probleme festgestellt, insbesondere, weil Sie sie löschen möchten. Sie können auf diese Weise auch die Dateien im lokalen Cache für Ihre App speichern.

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

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

[Docs] Die Dateien werden in der App privat sein, und wenn das Gerät wenig Speicher ist, kann Android sie loswerden. Obwohl du davon nicht abhängig sein solltest.

Sie möchten vielleicht einen Blick auf die Android Activity Life-cycle werfen. Wenn Sie also die Dateien verfolgen, die Sie in einer Sitzung erstellt haben. Befreien Sie sich von diesen Dateien in Ihrem onDestroy(). Ich würde vorschlagen, diese Liste als SharedPref oder etwas zu speichern. Grund? Das onDestroy() ist nicht das zuverlässigste Ding auf dem Planeten. Wenn Sie die Dateien gespeichert haben, können Sie sie beim nächsten Aufruf von onDestroy() löschen (falls sie noch existieren).

Persönlich würde ich wahrscheinlich onDestroy() für diesen Zweck nicht verwenden. Vielleicht ist ein onStop() zuverlässiger. Es ist dein Design und du wirst der beste Richter sein. :)