#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 выполняет всю работу за меня.