0

У меня есть поток в моем приложении, как это:Проверить, является ли деятельность активным или не из другой деятельности

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

Splash Screen -> Активность пользователей -> Главная активность

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

заставки -> Начала Всех

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

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

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

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

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

ответ

1

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

+0

Хотел бы я, чтобы я это сделал. Я попробовал это, на самом деле, я использую настраиваемую тему в своем приложении, тема также имеет настраиваемую панель действий, если я завершаю операцию и вызываю другое намерение, тогда переход показывает черную панель действий на долю секунды, которая будет быть очень плохой пользовательский опыт. – kittu88

+0

1-й запуск и завершение текущей деятельности, это хотите показать пустую панель действий. попробуйте –

+0

ok позвольте мне попробовать. Я обновлю вас. – kittu88

2

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

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

Его, что я всегда делал с приложениями, которые текут, как ваш

+0

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

+0

@ kittu88 Почему вы не называете 'finish' каждый раз, когда активность входа переходит в домашнюю деятельность? Таким образом, не будет «множественных экземпляров» –

+0

Хотелось бы, чтобы я мог это сделать. Я попробовал это, на самом деле, я использую настраиваемую тему в своем приложении, тема также имеет настраиваемую панель действий, если я завершаю операцию и вызываю другое намерение, тогда переход показывает черную панель действий на долю секунды, которая будет быть очень плохой пользовательский опыт. – kittu88

0

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

+0

Я протестировал его так, как вы предлагаете, и мог заметить укладку. – kittu88

+0

О, извините, я думал, что вы боитесь двойного творения деятельности. Затем вам нужно использовать флаги для намерений. Например, FLAG_ACTIVITY_CLEAR_TASK или FLAG_ACTIVITY_CLEAR_TOP. Для получения дополнительной информации прочитайте документацию http://developer.android.com/reference/android/content/Intent.html – user3390963

+0

Пожалуйста, прочитайте P.S. обновленного вопроса – kittu88

0

EDIT:

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

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

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


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

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

Из документации:

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

+0

Хотел бы я, чтобы я мог это сделать. Я попробовал это, на самом деле, я использую настраиваемую тему в своем приложении, тема также имеет настраиваемую панель действий, если я завершаю операцию и вызываю другое намерение, тогда переход показывает черную панель действий на долю секунды, которая будет быть очень плохой пользовательский опыт. – kittu88

0

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

В деятельности Начальный экран

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 завершит эту операцию входа.

Смежные вопросы