Как очистить стек до корневой активности, когда пользователь покидает приложение?
У меня есть приложение с двумя действиями, LogonAct и MainAct. LogonAct - это активность входа, которую я хочу заставить пользователя проходить каждый раз, когда они возвращаются в приложение. Я установил android: clearTaskOnLaunch = "true" на LogonAct.
Когда я впервые запускаю приложение, я просматриваю эту последовательность экранов,
Home -> LogonAct -> MainAct -> Home
Затем я следую этой последовательности,
LogonAct -> Back -> MainAct
Почему это возвращает меня в MainAct? Не следует ли закрывать эту активность, так как LogonAct имеет андроид: clearTaskOnLaunch = "true" . Я ожидал, что вас вернут домой, когда я нажму кнопку "Назад" из LogonAct.
Соответствующие фрагменты из AndroidManifest.xml,
<activity android:name=".LogonAct"
android:clearTaskOnLaunch="true">
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
<activity android:name=".MainAct">
<meta-data android:name="android.app.default_searchable"
android:value=".SearchResults" />
</activity>
Я использую 1.5.
Любая помощь была оценена.
Ответы
Ответ 1
В документах для android:clearTaskOnLaunch
упоминается, что этот атрибут применяется "всякий раз, когда [Действие] перезапускается с главного экрана".
Однако в вашем случае вы нажимаете кнопку Home, чтобы вернуться на главный экран, вместо того, чтобы нажимать кнопку Back. Это означает, что ваше приложение на самом деле не перезаписано, потому что MainAct
не был "завершен". Это происходит только тогда, когда вы нажимаете Back (или если Android убивает задачу для сохранения ресурсов и т.д.).
Поскольку у вас есть только два действия в вашем приложении, вы можете установить атрибут android:noHistory
на MainAct
, таким образом, чтобы пользователи могли никогда не возвращайтесь к нему и должны проходить через LogonAct
.
В стороне, кажется, немного раздражает, чтобы заставить пользователей повторно войти в систему каждый раз, когда они перемещаются от приложения (например, когда они получают телефонный звонок).
Вы можете сохранить токен сеанса с тайм-аутом в постоянном хранилище приложений или открыть сетевое подключение с помощью службы, если это работает как ваше приложение; но, конечно, это зависит от вас и ваших требований.:)
Ответ 2
Вы можете сделать следующее:
1. установите clearTaskOnLaunch = "true" в AndroidManifest, в объявлении основной активности
2. в действии, который должен закрыть:
@Override
public void onBackPressed(){
moveTaskToBack(true);
}
поэтому, если пользователь нажимает назад - он возвращается на рабочий стол
если пользователь снова запускает приложение - стек задачи очищается, и он приходит к основному виду деятельности