Закрыть все запущенные действия в приложении для Android? - PullRequest
5 голосов
/ 23 декабря 2011

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

Как закрыть предыдущее действие и закрыть приложение?

Ответы [ 11 ]

6 голосов
/ 14 февраля 2013

Это один из обходных путей, который я пробовал, и он отлично сработал для меня.

SOLUTION-1

this.finish();//try activityname.finish instead of this
Intent intent = new Intent(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_HOME);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);

используйте это в деятельности, где вы хотитечтобы выйти из приложения ....

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

SOLUTION-2

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

onActivityResult()

Например, предположим, что есть 3 действия A, B, C, для которых вы переходите из A-> B-> C, и в C вы хотите закрыть все действия, а затем использовать следующий пример.

Активность A

public class A extends Activity {
int Finish = 100;
Button launch_second;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    launch_second = (Button) findViewById(R.id.start_second_act);
    launch_second.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            Intent second = new Intent(A.this,
                    B.class);
            startActivityForResult(second, Finish);
        }
    });
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    switch (requestCode) {
    case 100:
        this.finish();
        break;
    default:
        break;
    }
    super.onActivityResult(requestCode, resultCode, data);

}

Активность B

public class B extends Activity {
private Button launch_next;

@Override
protected void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);
    setContentView(R.layout.second_main);
    launch_next = (Button) findViewById(R.id.start_third_activity);
    launch_next.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent third = new Intent(B.this,C.class);
            startActivityForResult(third, 100);
        }
    });
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    switch (requestCode) {
    case 100:
        setResult(requestCode);
        this.finish();
        break;

    default:
        break;
    }
    super.onActivityResult(requestCode, resultCode, data);
}

}

Активность C

public class C extends Activity {
Button kill_app;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.third_main);
    kill_app = (Button)findViewById(R.id.kill_app_btn);
    kill_app.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            C.this.finish();
            setResult(100);

        }
    });

}

}

SOLUTION-3

Доступен метод finishAffinity() вызовите его из любого действия, все предыдущие действия будут уничтожены.

3 голосов
/ 23 декабря 2011

РЕДАКТИРОВАТЬ

Сэм Янц ответ чище, чем этот метод.Используйте флажки намерений в ваших интересах

Когда пользователь нажимает, выйдите из системы:

Intent intent = new Intent(this,MyHomeActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
intent.putBooleanExtra("finishApplication", true);
startActivity(intent);

Затем в MyHomeActivity (Ваше начальное действие) в onResume :

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

Таким образом, вам не нужно проверять только все ваши действия в Домашней деятельности.


Более грязная опция:

Создатьстатическая логическая переменная в синглтоне где-то (вероятно, в классе, расширяющем приложение);

public static boolean loggingOut = false;

Когда пользователь нажимает кнопку выхода, задайте для этого параметра значение true и завершите вызов этой операции.

YourApplication.loggingOut = true;
finish();

В каждом действии в onResume ()

if(loggingOut){
   finish();
}

Убедитесь, что для этого логического значения установлено значение false в основной / начальной активности:

if(loggingOut){
   finish();
   YourApplication.loggingOut = false;
}

Есливы также хотите, чтобы кнопка «назад» выполняла это, переопределяет onBackPressed () , что затем также делает

@Override
public void onBackPressed(){
     YourApplication.loggingOut = true;
     super.onBackPressed();
}
1 голос
/ 15 февраля 2016
Intent intent = new Intent(this, LoginActivity.class);
ComponentName cn = intent.getComponent();
Intent mainIntent = IntentCompat.makeRestartActivityTask(cn);
startActivity(mainIntent);

Описание:

public static Intent makeRestartActivityTask (ComponentName mainActivity)

Создать намерение, которое можно использовать для повторного запуска задачи приложения в ее базовом состоянии.Это похоже на makeMainActivity (ComponentName), но также устанавливает флаги FLAG_ACTIVITY_NEW_TASK и FLAG_ACTIVITY_CLEAR_TASK.

1 голос
/ 24 декабря 2011

Спасибо за ваши ответы.Я решил свою проблему.

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

1 голос
/ 23 декабря 2011

использование finish () для каждого действия

1) Жизненный цикл активности

2) Закрытиевниз Деятельность и управление жизненным циклом действий

3) На тот же вопрос подробно ответил (2 подхода - Broadcast Receiver (+1) и Intent.FLAG_ACTIVITY_CLEAR_TOP)

0 голосов
/ 15 августа 2015

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

0 голосов
/ 16 сентября 2013

Вы можете использовать это
Intent intent = new Intent(Intent.ACTION_MAIN);<br> intent.addCategory(Intent.CATEGORY_HOME);<br> intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);<br> startActivity(intent);

на этот вопрос ответ Как выйти из приложения и показать домашний экран?

0 голосов
/ 23 декабря 2011

вставьте эту строку кода в ваше приложение System.exit (2); * +1001 *

0 голосов
/ 23 декабря 2011

Чтобы очистить весь стек, который отслеживает ваши действия в Android, вы можете использовать следующий код

Intent intent = new Intent(this, MyHomeActivity.class).setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
        finish();
        startActivity(intent);
0 голосов
/ 23 декабря 2011

Вообще основной стек Android для всех ваших действий при запуске и удаления его в зависимости от того, как вы вызываете следующую активность.Если вы хотите очистить все действия, установите этот флаг Intent.FLAG_ACTIVITY_CLEAR_TASK при запуске действия, чтобы очистить предыдущее действие.

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