Допустим есть программа, в которой может быть залогинен только один пользователь, т.е. нет переключения между аккаунтами — только Вася или Петя, но не оба одновременно.
Вроде все просто — вошли, загрузили данные, отображаем.
При выходе — просто удаляем данные и все тут.
Но дьявол как всегда в деталях...
Во-первых, если пользователь не нажимал явно "выйти" но по каким-либо причинам доступ данным не возможен (пользователь изменил пароль или удалил приложение из доверенных) — данные удалять не стоит, но при этом нужно перейти на страницу повторного входа. Данные же нужно сохранить, т.к. скорее всего пользователь просто перезайдет.
И тут сразу нюансы... Если мы данные не удаляем — то пользователь ведь может зайти под другим аккаунтом. Уже сразу нужно сравнить его данные или новый пользователь.
Далее...
При выходе нужно отписаться от оповещений как минимум. Иначе оповещение придет а пользователь не вошел. Глупо.
Еще далее. Фоновые задачи. Пользователь мог выйти, но при этом фоновую задачу вы не остановили. Данные удалили — а фоновая задача об этом не знает, т.к. исполняется в отдельном изоляте — она подумает что ничего не изменилось и сохранит некие новые данные для текущего пользователя. Значит обязательно остановить все фоновые задачи, дождаться остановки — и уже тогда удалять.
Но и еще. Остановили фоновые задачи — а если это не фоновая а запрос пользователя, который выполнялся дольше обычного? При этом он удалил базу, потом пришел ответ на запрос. Ну ок, можно блокировать запись в базу. Но! А что если вы создали новую базу (сняли блокировку) — и тут приходит старый ответ на запрос? Опаньки...
Или же умнее не смотря на то что пользователь может быть только один — делать вид как будто приложение поддерживает много-пользовательский режим — для каждого пользователя создавать свою базу данных а в общей конфигурации только указывать какой пользователь активен?
Казалось бы мелочь — но на практике как всегда множество нюансов...