При нажатии кнопки "Назад" я хотел бы, чтобы мое приложение вошло в остановленное состояние, а не уничтоженное состояние.
В документах Android это указывает:
... не все операции имеют поведение, что они уничтожаются, когда НАЗАД нажимается. Когда пользователь начинает играть музыку в Музыкальном приложении и затем оттесняет, приложение переопределяет нормальное заднее поведение, препятствуя тому, чтобы действие плеера было уничтожено, и продолжает играть музыку, даже при том, что ее действие больше не видимо
Как я копирую эту функциональность в своем собственном приложении?
Я думаю, что должно быть три возможности...
Получите нажатие кнопки "Назад" (как ниже) и затем назовите любой метод (методы) вызовами кнопки "Домой".
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if ((keyCode == KeyEvent.KEYCODE_BACK)) {
Log.d(this.getClass().getName(), "back button pressed");
}
return super.onKeyDown(keyCode, event);
}
Получите нажатие кнопки "Назад" и затем имитируйте нажатие кнопки "Домой".
Получите нажатие кнопки "Назад", затем запустите Действие главного экрана, эффективно поместив Действие моего приложения в остановленное состояние.
Править: Я знаю о сервисах, и использую один в приложении, с которым связана эта проблема. Этот вопрос конкретно о помещении Действия в остановленное состояние, а не уничтоженное состояние при нажатии кнопки "Назад".
] В большинстве случаев для выполнения чего-либо в фоновом режиме необходимо создать [] Службу [], а ваша видимая [] Деятельность [
] просто управляет этой [] Службой [
]. (Я уверен, что Музыкальный проигрыватель работает таким же образом, поэтому пример в документах кажется немного вводящим в заблуждение). Если это так, то ваша []Деятельность [
] может []закончиться [
], как обычно, и []Служба [
] будет продолжать работать.[
]Проще захватить кнопку []Назад [
] и вызвать [] moveTaskToBack(true)[] следующим образом:[
// 2.0 and above
@Override
public void onBackPressed() {
moveTaskToBack(true);
}
// Before 2.0
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK) {
moveTaskToBack(true);
return true;
}
return super.onKeyDown(keyCode, event);
}
]
[] Я думаю, что предпочтительным вариантом должно быть нормальное завершение Действия и возможность воссоздания себя, например, чтение текущего состояния из Службы, если это необходимо. Но []moveTaskToBack[
] можно иногда использовать как быструю альтернативу.[
] [] ПРИМЕЧАНИЕ []: как отметил Дейв ниже, в Android 2.0 появился новый метод []onBackPressed[
], и [] эти рекомендации [] о том, как работать с кнопкой Back.[
] Если вы хотите поймать кнопку "Назад", взгляните на [] это сообщение в блоге разработчиков Android []. Он описывает более простой способ сделать это в Android 2.0 и лучший способ сделать это для приложения, которое работает на 1.x и 2.0.[
]. [] Однако, если Ваша Деятельность остановлена, она все равно может быть прервана в зависимости от наличия памяти в устройстве. Если вы хотите, чтобы процесс выполнялся без пользовательского интерфейса, вам следует создать службу []Service [
]. []В документации сказано следующее о службах:[][
] [] [] Сервис не имеет визуального пользовательского интерфейса, а работает в фоновом режиме в течение неопределенного периода времени. Например, сервис может воспроизводить фоновую музыку по мере того, как пользователь занимается другими делами, или он может получать данные по сети или вычислять что-то и предоставлять результат деятельности, которая в этом нуждается.[
]. [
] Похоже, они соответствуют вашим требованиям. [
]