2012-03-28 71 views
0

對於我當前的項目,我想要SD卡上包含圖像文件的文件夾列表。我目前的代碼似乎很完美......但它會導致應用程序掛起,導致「[app]沒有響應」窗口。如果我告訴手機等待應用程序響應,則沒有問題,但我不想強制用戶執行此類操作。Android:通過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); 
    } 
} 

回答

4

由於您正在執行的操作是重量級操作,您將體驗到ANR - 應用程序無法響應。使用重量級操作的線程或AsyncTask。通過android閱讀無痛導線指南。