Intereting Posts

Есть ли способ иметь один и только один экземпляр каждого вида деятельности?

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

Например:

  1. Главное меню
  2. Список объектов
  3. Сведения об объекте
  4. Редактировать объект
  5. Сведения об объекте
  6. Сведения об объекте
  7. Редактировать
  8. Сведения об объекте

Теперь, когда пользователь нажимает назад, он должен дважды пройти «Детали объекта ребенка» (тот же самый объект, когда он отредактирован, возвращается к подробной странице), и то же самое происходит с «Сведения о родительском объекте».

Есть ли способ повторно использовать действия, если они уже открыты в стеке, и переупорядочить их на передний план? Единственный способ, который я видел, – это действия с атрибутом launcher . Я считаю, что видел singleTask и singleTop .

Если предполагается использовать эти два атрибута, singleTask и singleTop , как я должен их использовать? Когда я попытался включить их в приложение, это не имело значения. Нужно ли мне также устанавливать флаг при запуске намерения с использованием startActivity ?

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

В свойстве Manifest Activity вы можете android:launchMode="singleInstance" этот параметр android:launchMode="singleInstance"

Подробнее читайте здесь http://developer.android.com/guide/topics/manifest/activity-element.html

Это твой флаг! http://developer.android.com/reference/android/content/Intent.html#FLAG_ACTIVITY_REORDER_TO_FRONT

 intent.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT) 

Обратите внимание на «addFlags». Также обратите внимание, что onCreate не будет вызываться для этого действия, когда к нему будет отправлен новый Intent. Он будет доставлен через onNewIntent() .

Это не гарантирует, что существует один экземпляр действия Activity. Чтобы убедиться в этом, проверьте это: http://developer.android.com/guide/topics/manifest/activity-element.html#lmode

Использование android: launchMode = «singleTask» , вероятно, лучший подход, поскольку он не будет воссоздавать активность, если он уже запущен. Просто добавьте его в свою активность в AndroidManifest.xml, и все должно быть установлено.

 <activity android:name=".MyActivity" android:label="@string/app_name" android:launchMode="singleTask" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> 

Вот еще один вопрос, который может быть полезен: Android singleTask или singleInstance запускают режим?

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

Добавить намерение Флаги как

Intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK|Intent.FLAG_ACTIVITY_CLEAR_TOP); StartActivity(srcActivity.java, DesiredActivity.class);

Затем at onPause() Желаемая активность

Добавить finish() , Это сделало работу для меня.

 Intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK|Intent.FLAG_ACTIVITY_NO_HISTORY); 

Меня устраивает 🙂