Intereting Posts
Android-градир, собственные библиотеки для разных архитектур Активность с фрагментами не изменяется при открытии клавиатуры Java.lang.ClassNotFoundException после обновления студии Android Что такое символ 0x1f? Невозможно использовать onDismiss () при использовании настраиваемых диалогов – Android Как зарегистрировать некоторое пространство имен URL (myapp: //app.start/) для доступа к вашей программе, вызывая URL-адрес в браузере в ОС Android? Событие KeyTime delete (backspace) Почему Android перерабатывает неправильный вид в моем SpinnerAdapter? Как найти браузер по умолчанию на Android-устройстве Android HttpUrlConnection EOFException Невозможно поместить DrawerLayout в StatusBar Asynctask vs Thread vs Services vs Loader Jar этого файла класса принадлежит контейнеру «Android Dependencies», который не позволяет изменять исходные вложения в своих записях Как установить активный элемент в раскрывающемся меню «Панель действий»? Получить статус подписки на Android, не удалось с 403

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

В моем PoC у меня есть некоторые действия, HomeActivity , CreateActivity , SearchActivity , ResultsActivity , ResultDetailsActivity и UpdateActivity .

У меня есть два основных пути навигации: создание и поиск .

Навигация по пути « Создать» выглядит следующим образом: HomeActivity -> CreateActivity (полностью) -> HomeActivity

Навигация для поиска выглядит следующим образом: HomeActivity -> SearchActivity -> ResultsActivity ( ListActivity ) -> ResultDetailsActivity -> UpdateActivity – (полностью) -> ResultDetailsActivity (с обновленными данными).

В настоящее время startActivity(intent) на новую Activity осуществляется с помощью startActivity(intent) . Однако это приводит к открытию нескольких экземпляров каждого Activity .

Я довольно новичок в Android. Может ли кто-нибудь предложить мне, как я мог бы избежать этого?

Solutions Collecting From Web of "Как избежать нескольких экземпляров одной и той же Деятельности?"

Установка следующих флагов может помочь вам решить проблему:

  • Intent.FLAG_ACTIVITY_CLEAR_TOP
  • Intent.FLAG_ACTIVITY_REORDER_TO_FRONT

В своем манифесте android добавьте в свой <activity> android:launchMode="singleTask"

Для получения полного списка проверьте документацию о деятельности

В вашем манифесте:

  <activity android:name=".YourActivity" android:launchMode="singleTask" android:label="@string/app_name" /> 

Примечание: не используйте singleton.

Используйте флаг Intent когда startActivity :

 Intent intent = new Intent(this, MyActivity.class); intent.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT); startActivity(intent); 

Существует много видов флага.

Это будет полезно: активность андроид-синглтона

Лучшей формой управления мероприятиями является использование

startActivityForRestult (Намерение, ИД)

С помощью этого метода для вызова Activities ваша HomeActivity может управлять результатом для других действий в методе переопределения

  @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { // TODO Auto-generated method stub super.onActivityResult(requestCode, resultCode, data); } 

Вы можете отправить известный результат для разных действий и управлять им. Например:
(Allways with startActivityForResult)

HomeActivity -> SearchActivity -> ResultsActivity (ListActivity) -> ResultDetailsActivity -> UpdateActivity – (полностью) -> ResultDetailsActivity (с обновленными данными). Нажмите «Возврат» и отправьте SEARCH_fINISHED -> UpdateActivity уловить это и отправить тот же результат в методе onActivityResult и закончить () -> То же самое с searchActivity -> Главная

Это тоже может помочь:

Intent.FLAG_ACTIVITY_CLEAR_TOP
Intent.FLAG_ACTIVITY_REORDER_TO_FRONT

http://blog.akquinet.de/2010/04/15/android-activites-and-tasks-series-intent-flags/

Немногие вещи, чтобы добавить ответ, отправленный JoonSung Kim, измените метод addFlag, который будет бросать «не может разрешить ошибку»,

Change: intent.addFlag(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);

intent.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT); : intent.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);

Код должен быть:

 Intent intent = new Intent(this, MyActivity.class); intent.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT); startActivity(intent); 

Чтобы предотвратить множественный экземпляр одного и того же действия, измените флаг

intent.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT); : intent.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);

intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); : intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);

Код должен быть:

 Intent intent = new Intent(this, MyActivity.class); intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); startActivity(intent);