Как сделать операцию прекратить, а не уничтожить, с помощью клавиши 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()?
Предотвратить уничтожение активности как можно дольше
В приведенных выше сообщениях я подробно объяснил пример использования