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

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

Например:

  • Главное меню
  • Список объектов
  • Сведения об объекте
  • Редактирование объектов
  • Сведения об объекте
  • Сведения об объекте объекта
  • Редактирование дочерних объектов
  • Сведения об объекте объекта

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

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

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

Ответ 2

Это твой флаг! 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().

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

Ответ 3

Использование 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?

Ответ 4

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

Ответ 5

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

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

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

Добавить finish(), Это помогло мне.

Ответ 6

Это сработало для меня.

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

Если экземпляр этой Activity уже существует, он будет перемещен в начало. Если экземпляр НЕ существует, будет создан новый экземпляр.

Ответ 7

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

Это работает для меня:)