Android:迭代SD卡目录导致挂起

时间:2012-03-28 11:51:50

标签: android optimization directory

对于我当前的项目,我想要SD卡上包含图像文件的文件夹列表。我当前的代码似乎工作得很好...但它导致应用程序挂起,导致“[app]没有响应”窗口。如果我告诉手机等待应用程序响应,则没有问题,但我不想强迫用户使用此类行为。

我可以做些什么来避免在此过程中暂停我的应用程序?

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 个答案:

答案 0 :(得分:4)

您遇到ANR - 应用程序没有响应 - 因为您正在执行的操作是重量级的。使用线程进行重量级操作或使用AsyncTask。阅读android的无痛线程指南。