Запуск основного действия из свернутого состояния приложения

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

Но как это преодолеть, чтобы приложение запускалось из активности Home только каждый раз.

Я попытался установить noHistory для активности в манифесте. Но в этом случае мне придется переопределять onBackPressed в каждом действии и запускать действие несколько раз.

Может ли кто-нибудь предложить мне другие методы для этого.


person tejas    schedule 19.12.2013    source источник


Ответы (1)


Реализуйте эти 2 метода во всех необходимых вам действиях.

boolean flag = true;
@Override
protected void onStart() {
    // TODO Auto-generated method stub
    super.onStart();
    if(flag)
    Toast.makeText(getApplicationContext(), "start", 1).show();
    else
    {
        Toast.makeText(getApplicationContext(), "Restart 2", 1).show();
        Intent i = new Intent(SecondActivity.this,MainActivity.class);
        finish();
        startActivity(i);

    }
}

@Override
protected void onRestart() {
    // TODO Auto-generated method stub
    super.onRestart();
    Toast.makeText(getApplicationContext(), "Restart", 1).show();
    flag = false;
}

поэтому, когда вы повторно открываете приложение из фона, оно перенаправляется на ваш LoginActivity.

person Sanket Kachhela    schedule 19.12.2013
comment
Если MainActivity является точкой входа в приложение, оно должно быть уже запущено, поэтому не нужно запускать его снова, достаточно finish(). - person a.ch.; 19.12.2013
comment
@Sanket Kachhela, я считаю, что вам не нужен код, который запускает MainActivity из других действий - поскольку MainActivity является точкой входа, он уже находится в backstack, поэтому завершения текущего действия будет достаточно, чтобы сделать MainActivity видимым. - person a.ch.; 19.12.2013
comment
@ a.ch., это вызовет что-нибудь для backPressed? - person tejas; 20.12.2013
comment
Нет, не нужно его отменять. Видите ли, предлагаемое решение не решает следующий случай. Допустим, у нас начались эти действия: MainActivity, FirstActivity и SecondActivity. Если мы сейчас в фоновом режиме, а затем запустили с главного экрана, SecondActivity будет завершено и начнется новый MainActivity, в результате получится следующий стек: MainActivity, FirstActivity и MainActivity. То, что я пытаюсь сказать, - это не вызывать startActivity(i);, позволяя всем действиям, кроме основной, завершить их отдельные - person a.ch.; 20.12.2013
comment
значит, вы имеете в виду, что мы должны завершить все действия в onBackPressed () всех действий? - person Sanket Kachhela; 20.12.2013
comment
Эй, это вызывает у меня проблему. Запуск активности здесь прекрасен. Но думаю, что я запустил MainActivity, затем перешел в FirstActivity и SecondActivity. Во-вторых, я выхожу из приложения, нажав кнопку «Домой». Затем снова запустите приложение и перейдите к SecondActivity в последовательности. Теперь, если я нажму кнопку «Назад», он перейдет к MainActivity, а не к FirstActivity. Какие-либо предложения? - person tejas; 20.12.2013
comment
вы закончили firstactivity при вызове startActivity для secondActivity? - person Sanket Kachhela; 20.12.2013
comment
Да. Думаю, мне не стоит заканчивать это. Проблема в том, что при запуске из фона флаг установлен как false. Таким образом, выполняется else, и для первого флага активности также устанавливается значение false. Так что никогда не доходит, если для подавления - person tejas; 20.12.2013