如何递归调用doInBackground()

时间:2014-01-23 19:12:52

标签: android android-asynctask

我目前正在尝试扫描文件系统中的mp3文件。我做了一个AsyncTask来扫描目录,如果找到一个子文件夹,它会再次为该子文件夹调用doInBackground(),依此类推。但是,这似乎使应用程序崩溃。有没有办法递归调用doInBackground()

@Override
    protected List<File> doInBackground(String... params) {

        if (isCancelled()) return foundFiles_;
        publishProgress(String.valueOf(foundFiles_.size()));
        File file = new File(params[0]);
        String [] files = file.list();
        for(String fileName : files)
        {
            File foundFile = new File(fileName);
            if(foundFile.isDirectory())
            {
                doInBackground(fileName);
            }
            else
                foundFiles_.add(foundFile);
        }

        return foundFiles_;
    }

1 个答案:

答案 0 :(得分:2)

  

有没有办法递归调用doInBackground()?

我不会这样做。相反,将“扫描目录,如果找到子文件夹”移动到使用递归的其他方法(例如,scanDirectory())。然后,让doInBackground()第一次调用您的新方法。