Подтвердить что ты не робот

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

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

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

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

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

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

4b9b3361

Ответ 1

Когда вы используете метод finish(), он полностью не закрывает процесс, он работает в фоновом режиме STILL.

Пожалуйста, используйте этот код в Основной деятельности (Пожалуйста, не используйте в каждом мероприятии или в разделе "Мероприятия" ):

@Override
public void onBackPressed() {

    android.os.Process.killProcess(android.os.Process.myPid());
    // This above line close correctly
}

Ответ 2

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

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

setResult(RESULT_CLOSE_ALL);
finish();

Затем определите каждый обратный вызов активности onActivityResult(...), поэтому, когда действие возвращается с значением RESULT_CLOSE_ALL, оно также вызывает 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 в его предположении: храните пароль в переменной, чтобы он был уничтожен, когда приложение закрыто.

Ответ 3

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

Intent intent = new Intent(getApplicationContext(), LoginActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
intent.putExtra("EXIT", true);
startActivity(intent);

Приведенный выше код очищает все действия, кроме LoginActivity. LoginActivity - это первое действие, которое возникает, когда пользователь запускает программу. Затем поместите этот код внутри LoginActivity onCreate, чтобы сигнализировать, когда он должен сам себя разрушать, когда передается сообщение "Выход".

    if (getIntent().getBooleanExtra("EXIT", false)) {
         finish();
    }

Ответ на этот вопрос с платформы Android: "Не делайте кнопку выхода. Закончите действия, которые пользователь больше не хочет, а диспетчер активности очистит их по своему усмотрению".

Ответ 4

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

Почему?

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

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

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

Ответ 5

Использование метода 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

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

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