Загрузка изображений с использованием многопоточности в Android

#android #multithreading

#Android #многопоточность

Вопрос:

У меня есть класс, который расширяет Activity, и внутри него есть частный класс, который расширяет View, который я вызываю для загрузки изображений. Однако я не был уверен, следует ли мне использовать AsyncTask, обработчик или другие способы для выполнения загрузки изображений в фоновом режиме и одновременного отображения панели прогресса во время загрузки. Для AsyncTask экземпляр задачи должен быть создан в потоке пользовательского интерфейса (который, я полагаю, находится в классе Activity). Но все функции находятся в классе View и имеют проблемы с использованием AsyncTask. Является ли использование обработчика хорошим выбором?

 public class LargeImageScroller extends Activity {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
            setContentView(new SampleView(this));
    }
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {...}

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {...}

    private static class SampleView extends View {

        public SampleView(Context context) {...}
        public boolean onTouchEvent(MotionEvent event) {...}
        protected void onDraw(Canvas canvas) {...}
        private boolean createMap(Context context) {...}
}
  

Это грубый скелет программы. CreateMap() — это функция, с помощью которой я загружаю изображения в холст, чтобы отображать изображения. Но если я объявлю класс, который расширяет AsyncTask, экземпляр задачи может быть создан только в onCreate(), а не где-либо еще, поэтому у меня возникают проблемы с вызовом CreateMap() для загрузки изображений. Я думал об использовании обработчика, чтобы загружать изображения в отдельный поток из основного потока. Может кто-нибудь сказать мне, есть ли лучший способ сделать что-то?

Ответ №1:

Здесь есть действительно хороший пост о многопоточности в Android. Должен дать вам несколько советов о том, что делать.

http://android-developers.blogspot.com/2010/07/multithreading-for-performance.html

Комментарии:

1. спасибо за ссылку. Кажется, что AsyncTask выполняет всю работу за меня.