Как сделать операцию прекратить, а не уничтожить, с помощью клавиши BACK?

В настоящий момент действие уничтожается при нажатии клавиши BACK. Как я могу заставить его просто остановиться (т.е. Сохранить все переменные и т.д. Живыми), а не уничтожаться?

Спасибо!

Ответы

Ответ 1

Почему вам нужно сохранять переменные в живых? Учитывая установленный жизненный цикл приложения для Android, я не уверен, что предотвращение уничтожения активности "просто для сохранения переменных" имеет смысл.

  • Даже если вы остановите приложение, не уничтожив его, всегда есть шанс, что Android убьет его, чтобы освободить память. В любом случае вам придется учитывать это в своем коде, поэтому предотвращение уничтожения приложения не спасет вас от написания кода.

  • Переменные можно сохранять и восстанавливать относительно легко и быстро, используя SharedPreferences в методах onPause() и onResume(). Если вы не храните тонну данных, предотвращая уничтожение приложения, это не может иметь большого значения.

  • Похоже, вы хотите сохранить переменные в памяти, потому что вы намерены вернуться к этому действию. Как правило, вы не используете кнопку "Назад" для перехода от действий, на которые вы собираетесь вернуться. Вместо этого вы создадите намерение и начнете новое действие. Когда вы это сделаете, Android помещает текущую активность в Back Stack, вызывая onPause() и onStop(), что похоже на то, что вы ищете.

Итак, если вы по-прежнему хотите предотвратить вашу активность от уничтожения (по крайней мере, до тех пор, пока Android не решит, что она использует слишком много памяти и убивает ее самостоятельно), вы всегда можете использовать код Sagar и начать новую деятельность в onBackPressed().

@Override
public void onBackPressed()
{
    Intent intent = new Intent(this, Other.class);
    startActivity(intent);       
}

Просто убедитесь, что именно это вы действительно хотите сделать.

Ответ 2

Простая одна строка

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

Ответ 3

Нажатие клавиши BACK вызывает метод обратного вызова onBackPressed класса Activity. По умолчанию этот обратный вызов вызывает метод finish().

http://developer.android.com/reference/android/app/Activity.html#onBackPressed()

Вы можете переопределить этот метод, чтобы переместить активность в фоновый режим (имитируйте действие нажатия клавиши HOME.

например:


@Override
public void onBackPressed() {
    onKeyDown(KeyEvent.KEYCODE_HOME);        
}

Вы могли бы также рассмотреть moveTaskToBackground(), упомянутый здесь:

Отменить кнопку возврата, чтобы действовать как кнопка дома

Ответ 4

Это похоже на этот вопрос, который был задан ранее.

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

Ответ 5

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

Например: у вас есть 2 действия A и B. Сначала будет запущен A, затем A называет B. Когда B загружается, пользователь нажимает кнопку "Назад" и переключается обратно на активность A из B. Теперь B не следует уничтожать и просто переходит к фону, и когда пользователь снова запустит активность B из A, активность B будет перенесена на передний план вместо повторного создания или создания нового экземпляра!

Как реализовать это:

 1. Переопределить onBackPressed() действия B:

@Override
public void onBackPressed() {
    Intent backIntent = new Intent(this, ActivityA.class);
    backIntent.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
    startActivity(backIntent);
}

2. В действии A активируйте функцию B:

public void callActivityB() {
    Intent toBintent = new Intent(this, ActivityB.class);
    toBIntent.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
    startActivity(toBintent);
}

Не забудьте добавить флаг: Intent.FLAG_ACTIVITY_REORDER_TO_FRONT, когда вы вызываете A & B.

Ответ 6

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

В любом случае, я попытаюсь указать, почему некоторые из нас убеждены, что

переходит из Activity A в Activity B (создавая пользовательский интерфейс на основе некоторых выборок данных) AND

возврат из B в (уничтожение всех созданных пользовательских интерфейсов и/или извлеченных данных в B) иногда является плохой концепцией. Лучшим решением было бы сохранить стек так, как есть, поэтому используйте что-то вроде finish() в Activity B, но сохраняя состояние Activity B in Pause, поэтому позже, когда вы вызываете его снова из Activity A, он просто переходит в onResume = ничего не воссоздается в пользовательском интерфейсе нет дополнительных данных. Конечно, бонус - это быстрый и отзывчивый интерфейс, и разница в том, что у вас более сложный макет интерфейса.

Ответ 7

Просто укажите в манифесте для действия как

 android:persistent="true"

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

Как предотвратить вызов onDestroy() после onPause()?

Предотвратить уничтожение активности как можно дольше

В приведенных выше сообщениях я подробно объяснил пример использования