2012-03-28 8 views
0

私の現在のプロジェクトでは、イメージファイルを含むSDカードのフォルダの一覧が必要です。私の現在のコードは完璧に動作しているようですが、アプリケーションがハングして「[アプリケーション]が応答していません」というウィンドウが表示されます。アプリが応答するのを待つように電話に指示しても問題はありませんが、そのような動作をユーザーに強制したくありません。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でPainlessスレッドガイドを読んでください。

関連する問題