Android: Как сохраняется постоянство, когда приложение убито? - PullRequest
0 голосов
/ 13 октября 2018

Руководство по приложениям для Android предлагает использовать модели, отделенные от представлений, чтобы иметь постоянство, и объясняет:

Постоянство идеально подходит по следующим причинам:

  • Ваши пользователи не потеряют данные, если ОС Android уничтожит ваше приложение, чтобы освободить ресурсы.
  • Ваше приложение продолжает работать в случаях, когда сетевое соединение нестабильно или недоступно.

Я хочу знать, как приложение не теряет данные, даже если приложение убито?

Ответы [ 2 ]

0 голосов
/ 15 октября 2018

Существует 4 способа сохранения данных в Android, когда ваше приложение уничтожено ОС, вы можете выбрать один из них, чтобы восстановить данные или состояние приложения.

  • SQLite
  • Общие настройки
  • Внутреннее хранилище
  • Внешнее хранилище

SQLite

По сути, это реляционная база данных.Вы можете найти более подробную информацию в этой ссылке .Если вы решите использовать SQLite, я предлагаю вам использовать одну из библиотек ORM.Самый популярный - Room Persistence Libray от Android

Shared Preferences

. Вы можете использовать его для хранения данных значения ключа. Подробнее ...

Внешнее / внутреннее хранилище

Хранение файлов в файловой системе устройства.Разница между ними в том, что внутреннее хранилище является частным для вашего приложения.Внешнее хранилище позволяет хранить файлы в общей файловой системе. Запись файлов во внутреннее хранилище Запись файлов во внешнее хранилище

0 голосов
/ 13 октября 2018

Это одна из практик, применяемых в архитектурных схемах.Это означает, что роль представления (действия / фрагмента) заключается просто в отображении данных, и он не должен иметь возможность вносить изменения в данные напрямую.Это, в свою очередь, помогает нам решить множество проблем, связанных с постоянством: для более подробного объяснения, скажем, вы создаете приложение, похожее на 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());
}

}

Помимо того, что это грязный код, он имеет серьезные недостатки

  1. Компоненты приложения, такие как действия / фрагменты, управляются не нами, а не ОС Android.
  2. Их жизненный цикл не находится под нашим контролем, их можно уничтожить в любое время в зависимости от взаимодействия с пользователем.или другие факторы, такие как нехватка памяти
  3. Если бы мы создавали и обрабатывали наши данные в компоненте пользовательского интерфейса, все наши данные были бы уничтожены после уничтожения этого компонента.

В этом примере каждый раз, когда пользователь поворачивает устройство, действие уничтожается и воссоздается заново, что приводит к сбросу всех элементов данных и повторному выполнению сетевых вызовов, тратит пропускную способность пользователя и заставляет пользователя ждать новых запросов.завершить.Поэтому лучше избегать части обработки данных из пользовательского интерфейса

. Для большего понимания и ясности советуем вам посмотреть это видео от Lyla.Она хорошо объясняет с подобным примером.Пожалуйста, дайте мне знать, если вам нужно больше ясности. Ссылка на видео: Архитектурные компоненты DroidCon * Еще одна полезная ссылка: Хорошая статья, почему сохранение в пользовательском интерфейсе не является хорошим выбором

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...