необъяснимое поведение активности backstack

У меня есть простое приложение с двумя действиями. Вот манифест:

<application>
<activity
            android:name=".ActivityA"
            android:theme="@style/AppTheme.NoActionBar.Map">
            <intent-filter>
                <action android:name="android.intent.action.MAIN"/>
                <category android:name="android.intent.category.LAUNCHER"/>
            </intent-filter>
        </activity>
        <activity
            android:name=".ActivityB"
            android:theme="@style/AppTheme.NoActionBar">
            <intent-filter>
                <action android:name="android.intent.action.VIEW" />
                <category android:name="android.intent.category.DEFAULT" />
                <category android:name="android.intent.category.BROWSABLE" />
                <data android:host="https://stackoverflow.com/"
                      android:scheme="http"
                      android:pathPrefix="/questions/ask"
                    />
            </intent-filter>
        </activity>
</>

как вы можете видеть, когда будет нажата ссылка "https://stackoverflow.com/questions/ask" - мое приложение откроется второе занятие. В ActivityB я переопределяю метод onBackPressed:

override fun onBackPressed() {
        if(isTaskRoot){
                startActivity(Intent(this, MapActivity::class.java))
                finish()
            } else {
                super.onBackPressed()
            }
    }

поэтому, когда вторая активность начинается со ссылки, и я нажимаю кнопку «Назад», ActivityA открывается, а ActivityB завершается.

на первый взгляд все выглядит нормально, но если после этого я нажму домашнюю кнопку, а затем перезапущу приложение из стека - вместо ActivityA снова откроется ActivityB.

Пожалуйста, объясните мне, почему это происходит и как решить эту проблему. Спасибо!

ОБНОВЛЕНИЕ после onBackPressed в ActivityB открывается ActivityA, а затем я нажимаю наBackBtn вместо HomeBtn, поэтому приложение закрывается. в этом случае после перезапуска из стека открывается ActivityB.


person Andriy Antonov    schedule 05.04.2017    source источник


Ответы (1)


Когда вы нажимаете домашнюю кнопку в ActivityB, Android вызывает метод onPause() в жизненном цикле активности, и в этот момент ваше приложение приостанавливается в ActivityB. Он не уничтожается, как вы переопределяли onBackPressed(). Поэтому, когда вы снова запустите свое приложение, SO будет вызывать onResume() на ActivityB, который находится в бэкстеке. Чтобы изменить это поведение, вы должны переопределить метод onPause() при завершении действия вручную.

person Luiz Fernando Salvaterra    schedule 05.04.2017
comment
Я нажимаю homeBtn в ActivityA после того, как выхожу из ActivityB с onBackPressed - person Andriy Antonov; 05.04.2017
comment
Ясно, попробуйте вызвать метод завершения и в else, и в else { finish() } - person Luiz Fernando Salvaterra; 05.04.2017
comment
это не помогло бы, потому что isTaskRoot = true, иначе метод не вызвал бы - person Andriy Antonov; 05.04.2017