// 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);
                        }
                    }
                }
            }
        }

    }
05-11 20:41