С точки зрения ОО, бизнес-логика всегда должна быть изолирована от материалов UI. Я бы изолировать и централизовать все мои бизнес-вызов, как getSong(), getStore() и т.д. в POJO, и держать мой класс активности только сосредоточиться на манипуляции UI/рендеринга, это то, как я это делаю:
- Определение интерфейс IBusinessDAO
- Определить RealBusinessDAO реализует IBusinessDAO
- Определить MockBusinessDAO реализует IBusinessDAO
Вызов IBusinessDAO.getSong(); внутри AsyncTask.doInBackground()
public class MyActivity extends Activity {
IBusinessDAO businessDAO;
... ...
private class MyAsyncTask extends AsyncTask<Void, Void, Void> {
... ...
protected void doInBackground(Void... params) {
businessDAO.getSong();
}
}
... ...
public void onCreate(Bundle savedInstanceState) {
if (runInTest)
businessDAO = new MockBusinessDAO();
else
businessDAO = new RealBusinessDAO();
new myAsyncTask().execute();
}
}
Таким образом, в каждом из вашей реализации AsyncTask между различными видами деятельности, ваш AsyncTask.doInBackgroud() будет простым и чистым, в результате сохраняя ваш код более эффективным и ремонтопригодны.
Это также помогает повысить надежность кода, для модульной проверки вашей бизнес-логики, поскольку это POJO, вы можете использовать только JUnit, чтобы написать свой тестовый пример. Иногда мы хотим протестировать компонент пользовательского интерфейса, и нам все равно, как реализована базовая бизнес-логика, например, моя бизнес-логика подключается к удаленному HTTP-серверу, загружает некоторые данные json, я не хочу делать это каждый раз, когда я просто хочу протестировать макет пользовательского интерфейса, для этой ситуации я могу легко изменить все мои действия, используя MockBusinessDAO (вроде концепции DIY Spring), для тестирования компонента пользовательского интерфейса без учета того, как реализуется реальная бизнес-логика.
Последнее, это также улучшает повторное использование кода, так как ваш businesDAO не имеет ничего общего с Andriod, кроме классического POJO, кроме того, вам не нужно беспокоиться о параллелизме в вашей реализации BusinessDAO, поскольку все его методы будут называться внутри Метод AsyncTask.doInBackground().
Надеюсь, что помогите.
для вашего задач лучше использовать готовые готовые библиотеки: http://code.google.com/p/libs-for-android/wiki/ImageLoader – Yahor10
Спасибо, я уже использую imageloader от googletv для моего приложения: D –