Android: перебор каталогов SD-карт вызывает зависание - PullRequest
0 голосов
/ 28 марта 2012

Для моего текущего проекта я хочу список папок на SD-карте, которые содержат файлы изображений. Мой текущий код, кажется, работает отлично ... но это заставляет приложение зависать, вызывая окно "[приложение] не отвечает". Если я скажу телефону дождаться ответа приложения, проблем не будет, но я не хочу навязывать такое поведение пользователю.

Что можно сделать, чтобы приложение не зависало во время этого процесса?

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

1 Ответ

4 голосов
/ 28 марта 2012

вы испытываете ANR - приложение не отвечает - потому что выполняемая вами операция имеет большой вес.Используйте поток для тяжелой операции или AsyncTask.Прочитайте руководство по безболезненной нити android .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...