Правильно пропустите активность входа в систему, если он уже вошел в систему

Значок моей запуска в настоящее время запускает активность входа. Я сохранил зарегистрированный статус в SharedPreferences. Есть ли способ правильно пропустить активность входа и перейти прямо к основной активности без любых сбоев пользовательского интерфейса. Все существующие решения с finish() в onCreate() приводят к тому, что заголовок активности входа в систему будет кратковременно виден или какой-либо другой краткий пробел в пользовательском интерфейсе.

Ответы

Ответ 1

У вас есть активатор, не содержащий пользовательский интерфейс, который решает открыть MainActivity или LoginActivity. Вы не можете объявлять без интерфейса:

android:theme="@android:style/Theme.NoDisplay"

Два других возможных решения:

Просто сделайте это по-другому: сделайте вашу mainActivity своей пусковой установкой и проверите ее, будет ли пользователь зарегистрирован. Затем перенаправляйте на loginActivity, если это не так.

Другой способ - работать с фрагментами. Имейте базовую активность, которая может загружать как mainFragment, так и loginFragment. Для справки: https://developer.android.com/training/basics/fragments/index.html

Ответ 2

Вы можете создать базовую операцию, которая будет проверять, находится ли пользовательское имя пользователя и пароль уже в SharedPreferences, и запускает действие, если оно существует, следовательно, нет.

Пример:

public class BeanStalkBaseActivity extends SherlockActivity{

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

    setContentView(R.layout.activity_main);


    if(SavedPreference.getUserName(this).length() == 0)
    {
        Intent intent = new Intent(this,LoginActivity.class);
        intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
        finish();
        startActivity(intent);
    }else
    {
        Intent intent = new Intent(this,MainActivity.class);
        intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
        finish();
        startActivity(intent);
    }

}

}

BeanStalkBaseActivity должна быть вашей Launcher, поскольку она служит только в качестве проверки.

Ответ 3

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

Я последовал за этим великим гидом в первый раз: https://www.bignerdranch.com/blog/splash-screens-the-right-way/

Ответ 4

В основной деятельности просто проверьте, не является ли пользователь нулевым, затем запустите дом

firebaseAuth = FirebaseAuth.getInstance();

FirebaseUser user = firebaseAuth.getCurrentUser();

if (user != null) {
    finish();
    startActivity(new Intent(MainActivity.this, UserHomeActivity.class));
}

Ответ 5

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

Вы можете сделать это следующим образом:

  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    mAuth = FirebaseAuth.getInstance();
    if (mAuth.getCurrentUser() != null) {

        Toast.makeText(MainActivity.this, "Already Logged In", 
        Toast.LENGTH_LONG).show();
        Intent intent = new Intent(MainActivity.this, Home.class);
        intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
        startActivity(intent);

    } else {
        getWindow().requestFeature(Window.FEATURE_NO_TITLE);
        getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, 
        WindowManager.LayoutParams.FLAG_FULLSCREEN);

        setContentView(R.layout.activity_main);

        BtnSignUp = findViewById(R.id.btnSignUp);
        BtnLogIn = findViewById(R.id.btnLogIn);


        BtnSignUp.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                Intent signUp = new Intent(MainActivity.this, SignUpActivity.class);
                startActivity(signUp);

            }
        });

        BtnLogIn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                Intent logIn = new Intent(MainActivity.this, Login.class);
                startActivity(logIn);
            }
        });
    }
}