Это одна из практик, применяемых в архитектурных схемах.Это означает, что роль представления (действия / фрагмента) заключается просто в отображении данных, и он не должен иметь возможность вносить изменения в данные напрямую.Это, в свою очередь, помогает нам решить множество проблем, связанных с постоянством: для более подробного объяснения, скажем, вы создаете приложение, похожее на Instagram, которое позволяет вошедшему в систему пользователю отслеживать / отменять подписку на этого пользователя.Мы хотим, чтобы эта кнопка влияла на метку с количеством подписчиков и соответственно изменяла текст на кнопке.Давайте разберемся с примером кода.
Код:
public class UserProfileActivity extends AppCompatActivity {
...
@Override
protected void onCreate(Bundle savedInstanceState) {
...
isFollowing = webService.getIsFollowing();
numberOfFollowers = webService.getNumberOfFollowers();
toggleButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
toggleFollow();
}
});
}
private void toggleFollow() {
if (isFollowing)
unFollow();
else
follow();
}
private void unFollow() {
isFollowing = false;
numberOfFollowers -= 1;
followersText.setText(numberOfFollowers + " Followers");
setNotFollowingButton();
}
private void follow() {
isFollowing = true;
numberOfFollowers += 1;
followersText.setText(numberOfFollowers + " Followers");
setFollowingButton();
}
private void setFollowingButton() {
toggleButton.setText("Following");
toggleButton.setBackground(getLightGreenColor());
}
private void setNotFollowingButton() {
toggleButton.setText("Follow");
toggleButton.setBackground(getGreenColor());
}
}
Помимо того, что это грязный код, он имеет серьезные недостатки
- Компоненты приложения, такие как действия / фрагменты, управляются не нами, а не ОС Android.
- Их жизненный цикл не находится под нашим контролем, их можно уничтожить в любое время в зависимости от взаимодействия с пользователем.или другие факторы, такие как нехватка памяти
- Если бы мы создавали и обрабатывали наши данные в компоненте пользовательского интерфейса, все наши данные были бы уничтожены после уничтожения этого компонента.
В этом примере каждый раз, когда пользователь поворачивает устройство, действие уничтожается и воссоздается заново, что приводит к сбросу всех элементов данных и повторному выполнению сетевых вызовов, тратит пропускную способность пользователя и заставляет пользователя ждать новых запросов.завершить.Поэтому лучше избегать части обработки данных из пользовательского интерфейса
. Для большего понимания и ясности советуем вам посмотреть это видео от Lyla.Она хорошо объясняет с подобным примером.Пожалуйста, дайте мне знать, если вам нужно больше ясности. Ссылка на видео: Архитектурные компоненты DroidCon * Еще одна полезная ссылка: Хорошая статья, почему сохранение в пользовательском интерфейсе не является хорошим выбором