// String --> doInBackground(Params... params)的参数 // File --> publishProgress(Progress... values) // onProgressUpdate(Progress... values)的参数 // Void --> doInBackground()的返回值,onPostExecute(Result result)的参数 private class ScanMediaTask extends AsyncTask<String, File, Void>{ @Override protected void onPreExecute() { //此执行完后,马上调用doInBackground()方法 super.onPreExecute(); } @Override protected Void doInBackground(String... params) { //params为 new ScanMediaTask().execute("mnt/sdcard/");中传过来的String //在此方法中做主要操作 File file = new File(params[0]); searchAllMedias(file); return null; } @Override protected void onProgressUpdate(File... values) { //values为 publishProgress(file);中传过来的file mAdapter.addItem(values[0]); mAdapter.notifyDataSetChanged(); } @Override protected void onPostExecute(Void result) { //doInBackground()运行完后自动调用,result为doInBackground()的返回值 super.onPostExecute(result); } private void searchAllMedias(File f) { if(f!=null && f.exists() && f.isDirectory()){ File[] files = f.listFiles(); if(files != null){ for (File file : files) { if(file.isDirectory()){ searchAllMedias(file); }else if(file.exists() && file.canRead() && FileUtils.isVideoOrAudio(file)){ //调用此方法时,将会自动调用onProgressUpdate()方法 publishProgress(file); } } } } } }