Как очистить стек обратно в корневую активность, когда пользователь покидает приложение? - PullRequest
15 голосов
/ 25 января 2010

У меня есть приложение с двумя действиями, LogonAct и MainAct. LogonAct - это вход в систему, который я хочу заставить пользователя проходить каждый раз, когда он возвращается в приложение. Я установил android: clearTaskOnLaunch = "true" в LogonAct.

Когда я впервые запускаю приложение, я прохожу эту последовательность экранов,

Home -> LogonAct -> MainAct -> Home

Затем я следую этой последовательности,

LogonAct -> Back -> MainAct

Почему он возвращает меня в MainAct? Если эта активность не была закрыта, так как LogonAct имеет android: 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.

Любая помощь приветствуется.

Ответы [ 2 ]

15 голосов
/ 02 июня 2011

Вы можете сделать следующее:
1. установить clearTaskOnLaunch = "true" в AndroidManifest, в объявлении основной активности
2. в деятельности, которая должна закрыться:

@Override
public void onBackPressed(){
    moveTaskToBack(true);
}

так что, если пользователь нажимает назад - он возвращается к домашнему экрану если пользователь снова запускает приложение - стек заданий очищается, и он входит в основное действие root

11 голосов
/ 25 января 2010

В документах для android:clearTaskOnLaunch указано, что этот атрибут применяется "всякий раз, когда [действие] перезапускается с главного экрана".

Однако в вашем случае вы нажимаете кнопку Home , чтобы вернуться на главный экран, а не кнопку Back . Это означает, что ваше приложение на самом деле не перезапущено , потому что MainAct не было «завершено». Это происходит только тогда, когда вы нажимаете Назад (или если Android убивает задачу, чтобы сэкономить ресурсы и т. Д.).

Поскольку у вас есть только два действия в вашем приложении, вы можете установить атрибут android:noHistory на MainAct, тем самым гарантируя, что пользователи никогда не смогут вернуться к нему и должны пройти через LogonAct.

Кроме того, кажется немного раздражающим заставлять пользователей повторно входить в систему каждый раз, когда они уходят из приложения (например, когда они получают телефонный звонок).
Вы можете сохранить токен сеанса с тайм-аутом в постоянном хранилище вашего приложения или оставить сетевое соединение открытым с помощью службы, если так работает ваше приложение & mdash; но, конечно, это зависит от вас и ваших требований. :)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...