2012-03-30 7 views
0

Ich schreibe eine App und ein accoopmanying Widget, das Daten benötigt. Diese Daten werden über das Internet heruntergeladen. Ich plane, einen IntentService zu verwenden, um den Download durchzuführen. Dieser Dienst speichert die Daten als Datei. Diese Datei wird dann sowohl von der App als auch vom Widget verwendet.Wie teile ich eine Datei zwischen Widget, Service und App?

Wie kann ich verhindern, dass die App und das Widget die Datei lesen, während der Dienst darauf schreibt?

Und wie kann ich verhindern, dass der Dienst in die Datei schreibt, während die App oder das Widget die Datei liest?

Danke!

Antwort

1

Betrachten Application erstreckt und ein Feld zum Lesen deklariert und Schreibrechte:

public class APP extends Application { 
    boolean motherMayI; 

    ... 
} 

Dann, wenn Sie öffnen ein FileInputStream oder ein FileOutputStream,

... 
if (motherMayI) { 
    APP.motherMayI = false; 
    FileInputStream input = context.openFileInput("some_file_name"); 

    //read your stuff 

    input.close() 
    APP.motherMayI = true; 
} 
... 

Im Wesentlichen muss das Feld motherMayI wahr sein für jemand, um die Datei zu lesen oder zu schreiben, und ihre einzige falsche, während sie gelesen oder geschrieben wird.

EDIT:

public FileInputStream getFileInputStream() { 
    return context.openFileInput(file_name); 
} 

Dies würde eine Instanz von APP erfordern.

+0

Ok, das scheint eine einfache und gute Lösung zu sein. Aber ich weiß nicht über den Lebenszyklus für das Application-Objekt. Ist es verfügbar, wenn keine Aktivitäten erstellt und nur Widgets erstellt werden? –

+0

Ich kenne die genaue Antwort auf Ihre Frage nicht, aber hier ist, was ich denke: Das Widget liest eine Datei und muss daher einen 'FileInputStream' öffnen. Dies muss in Java gemacht werden, daher ist das 'Application' Objekt MOST WAHRSCHEINLICH verfügbar. Wenn nicht, erstellen Sie einfach eine Methode in 'APP', die einen' FileInputStream' zurückgibt. Siehe zur Klärung bearbeiten. – gobernador

+0

Die erste vorgeschlagene Lösung funktioniert großartig. Vielen Dank! –

Verwandte Themen