2017-06-27 2 views
1

In Android ist die beste Praxis, um die ganze harte Arbeit in einem separaten Thread zu tun, um die ui nie zu blockieren. Jetzt ist mein einziges Ziel, alle Dateien eines App internen Verzeichnis aufgelistet wie:Android Dateioperationen async

final File directory = new File(context.getFilesDir(), "images"); 
if(!directory.exists()) { 
    directory.mkdirs(); 
} 
return directory.listFiles(); 

soll ich tun dies in einem Loader oder AsyncTaskLoader? In meinem Kopf taucht noch eine Frage auf. I.e. wenn mein Loader über FileObserver auf Verzeichnisänderungen hört dann ist dieser Beobachter im Hauptthread bauen und tut dies wie:

new FileObserver(new File(context.getFilesDir(), "images").getPath()) ... 

Das Verzeichnis sollte dann auch asynchron geladen werden.

Antwort

1

Das Auflisten von Verzeichnis-Dateien ist im Allgemeinen eine sehr schnelle Operation und würde keinen Hintergrund-Thread erfordern.

Wenn Sie Änderungen zu hören, hier in Datei ist die Antwort auf den zweiten Teil Ihrer Frage in Bezug auf FileObserver Multithreading:

Es spielt keine Rolle, auf dem Thread Sie eine FileObserver erstellen. Alle Arbeiten finden auf einem speziellen FileObserver-Thread statt. onEvent wird in diesem speziellen Thread aufgerufen. Sie sollten dann manuell mit dem von Ihnen benötigten Thread umgehen. Die onEvent Dokumente machen es sehr klar:

Der Event-Handler, der von Unterklassen implementiert werden muss. Diese Methode wird auf einem speziellen FileObserver-Thread aufgerufen. Es läuft unabhängig von irgendwelchen Threads, so achten Sie darauf, geeignete Synchronisation zu verwenden! Erwägen Sie die Verwendung von Handler.post (java.lang.Runnable) zu Shift-Ereignishandhabungsarbeit zum Hauptthread, um Nebenläufigkeit Probleme zu vermeiden.