Проверьте, активна или нет активность из другого вида деятельности

У меня есть поток в моем приложении:

Для новых пользователей:

Заставка → Вход в систему → Главная страница

Для уже зарегистрированных пользователей:

Всплеск экрана → Главная страница

В основном на экране Splash Screen есть опция if else, чтобы решить, к какой активности перейти. Как только первый пользователь регистрируется, его статус сохраняется в переменной предпочтения для экрана заставки, чтобы решить следующий раз, чтобы не открывать активность входа.

Теперь ситуация такова. Если новый пользователь входит в систему и переходит к домашней активности, а затем выходит из системы. Он перенаправляется на экран входа в систему, что в значительной степени должно произойти. Но, если существующий пользователь откроет приложение, ему будет показан экран Splash и он будет непосредственно перемещен в главную активность. Теперь, если пользователь выходит из системы, он выходит из приложения. Это происходит потому, что в функции входа в аккаунт нет экземпляра, и, таким образом, завершение операции "Главная" завершает работу всего приложения. Выход из системы фактически завершает главную деятельность, естественно, последняя активная деятельность должна открыться. Что не происходит.

Что я хочу сделать, так это то, что я хочу реализовать логику, которая будет проверять наличие активности входа или нет.Если его доступно, то finish() будет называться иначе, действие входа будет вызвано с помощью намерения.

Скажите, пожалуйста, как это сделать.

PS: Мое приложение использует настраиваемую тему с настраиваемой панелью действий.Если я назову финиш и Intent вместе, или я использую флаги для очистки существующих действий, тогда возникает странный эффект перехода, который показывает черную стандартную панель действий в течение секунды секунды, создавая тем самым плохой пользовательский интерфейс.

5 ответов

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


Теперь, если пользователь выходит из системы, он выходит из приложения. Это происходит потому, что в функции входа в аккаунт нет экземпляра, и, таким образом, завершение операции "Главная" завершает работу всего приложения.

Если я понял ваш вопрос, почему бы вам просто не вызвать функцию Login Activity в Login Activity вручную после того, как пользователь logout кнопку logout из logout?

Это то, что я всегда делал с приложениями, которые имеют поток, похожий на ваш


РЕДАКТИРОВАТЬ:

Хм, но не было бы у вас проблемы с переходом? (Если вы уже вошли в систему, а затем выходите из системы - с помощью функции намерения/завершения() у вас будет такая же черная панель действий, что и нет?)

Возможно, подумайте о следующем (я действительно сделал это в своем приложении):

Слейте экран заставки и войдите в одно действие и в зависимости от того, вошли ли вы в систему - отобразите поля входа или перейдите на главный экран. Тогда у вас есть непрозрачный пакет действий независимо от вариантов использования и без мамбо-jumbo, если у меня уже есть это или нет.

Я не могу прокомментировать из-за того, что мне не хватает 4 репа, поэтому я опубликую здесь ответ:

Я думаю, что @Blaze Tama прав. Вы также можете использовать FLAG_ACTIVITY_CLEAR_TOP, чтобы избежать проблем с потоком стека:

Из документов:

Если установлено, и запущенная деятельность уже запущена в текущей задаче, вместо того, чтобы запускать новый экземпляр этого действия, все остальные действия поверх него будут закрыты, и этот намерение будет доставлен в наверх) старая деятельность как новое намерение.


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

В активности Splash Screen

Intent intent = new Intent(this, Login.class);
If (user already logged in)
{
 intent.putextra("Logged in", true);
}

startActivity(intent);

В активности входа

@Override
protected void onCreate(Bundle savedInstanceState)
{
 super.onCreate(savedInstanceState);

 Intent intent = getIntent();
 if (intent != null)
 {
 if (intent.getBooleanExtra("Logged in", false))
 {
 startActivityForResult(new Intent(this, Home.class), requestCode);
 }
 }
 else
 {
 // The existing code here
 }
}

В операции "Домой" отправьте код, чтобы указать, вышел ли пользователь или просто "BackPress". Если BackPress завершит эту операцию входа.


Вы всегда можете вызвать функцию входа в систему с помощью намерения. Если активность доступна, андроид покажет эту активность. Else android автоматически создаст новую активность. Фактически, поэтому мы используем намерения, чтобы показывать активность, а не создавать действия вручную. Система улавливает это намерение и делает всю грязную работу.

licensed under cc by-sa 3.0 with attribution.