Asynctask callback methods

onPreExecute(): before the task is executed, Main
doInBackground(Params…): After onPreExecute, Background
onProgressUpdate(Progress…): After publishProgress() is called, while doInBackground is executing, Main
OnPostExecute(Result): After doInBackground() finishes, Main

Review of generics
ArrayList
add(E e)->requires object of type E as input
get(int index)->returns object of type E
ArrayAdapter

private class DownloadFileTask extends AsyncTask{
	protected Long doInBackground(RUL... urls){
		int count = urls.length;
		long totalSize = 0;
		for(int i = 0; i < count; i++){
			totalSize += Downloader.downloadFile(url[i]);
			publishProgress((int)((i/(float) count)* 100));
			if(isCancelled()) break;
		}
		return totalSize;
	}
	protected void onProgressUpdate(Integer... progress){
		setProgressPercent(progress[0]);
	}
	protected void onPostExecute(long result){
		showDialog("Downloaded " + result + " bytes");
	}
}
private class DownloadWebpageTask extends AsyncTask<String, Void, String>{
	@Override
	protected String doInBackground(String... urls){
		try {
			return downloadUrl(urls[0]);
		} catch (IOException e){
			return "Unable to retrieve web page. URL may be invalid.";
		}
	}

	@Override
	protected void onPostExecute(String result){
		textView.setText(result);
	}
}