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

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

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

У меня есть onCreate() каждого действия, настроенного таким образом:

public void onCreate(Bundle savedInstanceState) {  
    // Activity code  
    checkLogin();  
}

И checkLogin():

if (GlobalContext.getCurrentUser() == null) {
    Intent i = new Intent(this, LoginActivity.class);
    startActivityForResult(i, GlobalContext.REQUEST_LOGIN);
}

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

Как я могу вызвать вызов checkLogin() каждый раз, когда действие (re) запускается?

Или есть другой, лучший способ сделать то, что я хочу?

EDIT:

На основе ответа @Gabriel и следующей диаграммы из ссылок SDK, я переместил checkLogin() в метод onResume() вместо onCreate, решая мою проблему.

Activity life cycle

Ответ 1

Переместите вызов на checkLogin() от onCreate() до onStart().

Ответ 2

Я предлагаю вам добавить checkLogin() в acтивность onResume(), поскольку проверка его в методе onCreate() приведет к вызову проверки входа в систему 1 раз только при создании активности.

Или даже тесто должно переместить его на

onAttachToWindow()

Итак, каждый раз, когда ваша деятельность выйдет на фронт. onAttachToWindow() будет вызываться и будет проверяться для входа.

Ответ 3

В fisrt Activity, где пользователь вошел в систему, попробуйте сохранить переменную в своих SharedPreferences следующим образом:

SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0);
      SharedPreferences.Editor editor = settings.edit();
      editor.putBoolean("logged", true); // set it to false when the user is logged out

      // Commit the edits!
      editor.commit();

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

@Override
    protected void onStart(Bundle state){
       super.onStart(state);
       . . .

       // Restore preferences
       SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0);
       boolean loggedIn = settings.getBoolean("logged", true);
       if(!loggedIn){
            Toast.makeText(this,"you are not logged in !!",3000).show();
            Intent i = new Intent(this,LoginActivity.class);
            startActivity(i);
       }
    }