Завершение всех действий, начатых до начала - PullRequest
6 голосов
/ 02 июня 2011

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

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

Ответы [ 3 ]

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

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

Однако, если вам действительно нужно это сделать, вы можете использовать FLAG_ACTIVITY_CLEAR_TOP

Я приведу здесь пример кода, где MainActivity - это первое действие в приложении:

public static void home(Context ctx) {
    if (!(ctx instanceof MainMenuActivity)) {
        Intent intent = new Intent(ctx, MainMenuActivity.class);
        intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
        ctx.startActivity(intent);
    }
}

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

    public static void clearAndExit(Context ctx) {
    if (!(ctx instanceof MainMenuActivity)) {
        Intent intent = new Intent(ctx, MainMenuActivity.class);
        intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
        Bundle bundle = new Bundle();
        bundle.putBoolean("exit", true);
        intent.putExtras(bundle);
        ctx.startActivity(intent);
    } else {
        ((Activity) ctx).finish();
    }
}

Надеюсь, это поможет.

3 голосов
/ 24 апреля 2014

Попробуйте это, если вы нацелены на уровень APi <11 </p>

Intent intent = new Intent(getApplicationContext(), LoginActivity.class);
ComponentName cn = intent.getComponent();
Intent mainIntent = IntentCompat.makeRestartActivityTask(cn);
startActivity(mainIntent);
2 голосов
/ 02 июня 2011

Возможно, вам понадобится FLAG_ACTIVITY_CLEAR_TOP флаг намерения:

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

Intent i = new Intent(..);
i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);

и затем запустите Activity с этим намерением.

Подробнее о задачах и обратном стеке см. в документации: Задачи и обратный стек .

Однако для реализации входа / выхода из приложения (если оно не взаимодействует с онлайн-службой) вы можете использовать SharedPreferences .Таким образом, при запуске приложения вы можете проверить, вошел ли пользователь в систему (например, включен ли какой-либо флаг в настройках), и при выходе из приложения (например, по кнопке) вы можете сбросить этот флаг.

Удаление / удаление действийбыть оставленным в системе.В зависимости от конструкции системы ОС Android отвечает за срок службы приложения.

Например, проверьте исходные коды приложений Password Safe .Ему нужен пароль каждый раз, когда вы открываете свежий экземпляр приложения.

...