Ecco un esempio di AsyncTask che scarica un file da un server remoto...

codice:
    private class DwTask extends AsyncTask<String, Integer, String> {
        
        private static final String TAG = "NomeApp.class";
        private int fileLength;
        private Context ctx;
        private final ProgressDialog dialogUpdate;
        
        public DwTask(Context ctx, int fileLength) {
            this.ctx = ctx;
            this.fileLength = fileLength;
            dialogUpdate = new ProgressDialog( ctx );
        }
        
        @Override
        public void onPreExecute() {
            dialogUpdate.setMessage("Download file in progress...");
            dialogUpdate.setProgressStyle( ProgressDialog.STYLE_HORIZONTAL );
            dialogUpdate.setIndeterminate( false );
            dialogUpdate.setMax( 100 );
            dialogUpdate.setProgress(0);
            dialogUpdate.setCancelable( false );
            dialogUpdate.setCanceledOnTouchOutside( false );
            dialogUpdate.show();
        }
        
        @Override
        protected String doInBackground(String... fileUrl) {
            String localPath = Environment.getExternalStorageDirectory().getPath() + "/NomeApp/dwnldFile.txt";
            InputStream input = null;
            OutputStream output = null;
            try {
                // Mi connetto al URL
                URL url = new URL( fileUrl[0] );
                URLConnection connection = url.openConnection();
                connection.connect();

                // Apro gli stream di input/output
                input = url.openStream();
                output = new FileOutputStream( localPath );
                
                // Scarico il file a blocchi di 1024 byte
                byte data[] = new byte[1024];
                int total = 0;
                int count;
                int lastProgress = 0;
                while ((count = input.read(data)) != -1) {
                    output.write(data, 0, count);
                    output.flush();
                    total += count;
                    Integer byteProgress = (total * 100) / fileLength;
                    if (byteProgress != lastProgress) {
                        publishProgress( byteProgress );
                        lastProgress = byteProgress;
                    }
                }

                // Effettuo il flush
                output.flush();
            } catch (Exception e) {
                Log.e(TAG, "Error in download of file", e);
            } finally {
                if (output != null) {
                    try { output.close(); } catch (Exception e) { }
                }
                if (input != null) {
                    try { input.close(); } catch (Exception e) { }
                }
            }
            return localPath;
        }
        
        @Override
        protected void onProgressUpdate(Integer... values) {
            dialogUpdate.setProgress(values[0]);
            super.onProgressUpdate(values);
        }
        
        @Override
        protected void onPostExecute(String path) {
            dialogUpdate.dismiss();
        }
    }

Come vedi, è stato fatto l'override di diversi metodi, tra i quali anche onPostExecute().


Ciao.