2012-03-28 17 views
0

Für mein aktuelles Projekt möchte ich eine Liste von Ordnern auf der SD-Karte, die Bilddateien enthalten. Mein derzeitiger Code scheint perfekt zu funktionieren ... aber es verursacht, dass die App aufhängt und das Fenster "[App] reagiert nicht" anzeigt. Wenn ich dem Telefon sage, dass es auf die Antwort der App warten soll, gibt es keine Probleme, aber ich möchte ein solches Verhalten für einen Benutzer nicht erzwingen.Android: Iteration über SD-Karten-Verzeichnisse verursacht hängen

Was kann ich tun, um zu vermeiden, dass meine App während dieses Vorgangs hängen bleibt?

public void onCreate(Bundle savedInstanceState) 
{ 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.picker); 

    Set<File> directoryEntries = new HashSet<File>(); 

    Stack<File> dirs = new Stack<File>(); 
    // FilenameFilter#accept(File, String): returns true if file is an image 
    ImageFilter imagefilter = new ImageFilter(); 
    // FileFilter#accept(File): returns true of file is a directory 
    DirectoryFilter dirfilter = new DirectoryFilter(); 

    dirs.push(Environment.getExternalStorageDirectory()); 
    while(!dirs.empty()) 
    { 
     File currentDir = dirs.pop(); 
     File[] subdirs = currentDir.listFiles(dirfilter); 
     File[] images = currentDir.listFiles(imagefilter); 

     if(images != null && images.length > 0) 
      directoryEntries.add(currentDir); 

     for(File dir : subdirs) 
      dirs.push(dir); 
    } 
} 

Antwort

4

Sie haben Erfahrung, dass eine ANR - Anwendung nicht reagiert - weil die Operation, die Sie ausführen, Schwergewicht ist. Verwenden Sie einen Thread für Schwergewicht oder eine AsyncTask. Lesen Sie den Painless Fadenführer von android.

Verwandte Themen