После многих подходов я в итоге использовал этот, потому что он универсальный, оставил код чистым и решил проблему вызова метода .get () и блокировки потока пользовательского интерфейса. Надеюсь, это поможет.
syncTask блокирует элемент кнопки блокировки во время загрузки изображения, и диалоговое окно прогресса отображается с задержкой - оно показывается некоторое время, прежде чем показывается изображение, но загрузка занимает много времени, кнопка блокируется (оранжевая) и диалоговое окно не отображается.
public Bitmap download(String url, ProgressBar progressbar) throws InterruptedException, ExecutionException {
BitmapDownloaderTask task = new BitmapDownloaderTask(progressbar);
task.execute(url);
return task.get();
}
class BitmapDownloaderTask extends AsyncTask<String, Void, Bitmap> {
public BitmapDownloaderTask(ProgressBar progressbar) {
}
@Override
protected void onPreExecute() {
dialog = new ProgressDialog(ShowActivity.this);
dialog.setMessage("Loading");
dialog.setIndeterminate(true);
dialog.setCancelable(false);
dialog.show();
}
@Override
protected Bitmap doInBackground(String... Params) {
return imageLoader.getBitmap(params[0]);
}
@Override
protected void onPostExecute(Bitmap bitmap) {
dialog.dismiss();
}
}
В прослушивателе кнопки просто вызовите функцию загрузки, параметр прогресса - потому что у меня есть круг индикатора выполнения в просмотре изображений - диалог предназначен только для тестирования, чтобы выяснить, почему существует задержка и блокировка. В другом приложении я использую runable, а поток и элемент не блокируются, но в руководствах AsyncTask упоминается как лучшее решение для этого.