Как уничтожить приложение со всеми его операциями? [дубликат]

Возможный дубликат:
Выход из приложения - который осужден?

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

Как только пользователь хочет выйти, пароль в SharedPreferences должен быть вытерт, и конечно все операции приложения должны быть закрыты (не имеет никакого смысла выполнять их без известного пароля - они отказали бы).

Как я могу сделать это?

System.exit(0) и finish() только выйдите из текущего действия - бесполезный. Я знаю, что существует taskmanager приложение. Как тот делает его? Это может уничтожить целое приложение...

56
задан Community 23 May 2017 в 11:54
поделиться

4 ответа

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

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

setResult(RESULT_CLOSE_ALL);
finish();

Затем определите обратный вызов каждого действия onActivityResult (...) , чтобы, когда действие возвращалось с RESULT_CLOSE_ALL value, он также вызывает finish () :

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    switch(resultCode)
    {
    case RESULT_CLOSE_ALL:
        setResult(RESULT_CLOSE_ALL);
        finish();
    }
    super.onActivityResult(requestCode, resultCode, data);
}

Это вызовет каскадный эффект, закрывающий все действия.

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

38
ответ дан 26 November 2019 в 17:04
поделиться

который хранится в файле SharesPreferences до тех пор, пока приложение нуждается в этом.

Зачем?

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

Еще лучше: не помещайте пароль в SharedPreferences. Держите его в статическом члене данных. Эти данные естественным образом исчезнут, когда все действия в приложении будут завершены (например, кнопкой BACK) или уничтожены иным образом (например, выкинуты из оперативной памяти, чтобы освободить место для других действий через некоторое время после того, как пользователь нажал HOME).

Если вам нужен какой-то проактивный "пароль для смыва", просто установите статический член данных в null, и пусть ваши действия проверяют этот член и предпринимают соответствующие действия, когда он null.

7
ответ дан 26 November 2019 в 17:04
поделиться

Использование метода onBackPressed():

@Override
public void onBackPressed() {    
    android.os.Process.killProcess(android.os.Process.myPid());
}

или использование метода finish(), у меня получилось что-то вроде

//Password Error, I call function
    Quit();             


    protected void Quit() {
        super.finish();
    }

С помощью super.finish() вы закрываете активность суперкласса.

6
ответ дан 26 November 2019 в 17:04
поделиться

Мое понимание структуры приложений Android заключается в том, что это специально не разрешено. Приложение закрывается автоматически, когда в нем больше нет текущих действий. Попытка создать кнопку "убить", очевидно, противоречит задуманному дизайну системы приложений.

Чтобы получить желаемый эффект, можно инициировать различные действия с помощью startActivityForResult(), а кнопка выхода должна посылать результат, который говорит родительскому действию завершить работу (finish()). Затем эта активность может отправить тот же результат как часть своей функции onDestroy(), которая вернется к основной активности и приведет к отсутствию запущенных активностей, что приведет к закрытию приложения.

3
ответ дан 26 November 2019 в 17:04
поделиться
Другие вопросы по тегам:

Похожие вопросы: