Ответ 1
в свойстве Manifest Activity вы можете указать этот параметр android:launchMode="singleInstance"
Подробнее читайте здесь http://developer.android.com/guide/topics/manifest/activity-element.html
Я нахожу, что в моем приложении пользователь может получить "вложенные" в различные действия, открытые во время использования приложения.
Например:
Теперь, когда пользователь нажимает назад, он должен дважды пройти "Детали объекта ребенка" (тот же объект, когда он отредактирован, он возвращается к подробной странице), и то же самое происходит для "Сведения о родительском объекте",.
Есть ли способ повторно использовать действия, если они уже открыты в стеке, и переупорядочить их на передний план? Единственный способ, который я видел, - это действия с атрибутом launcher
. По-моему, я видел singleTask
и singleTop
.
Если предполагается использовать эти два атрибута, singleTask
и singleTop
, как я должен их использовать? Когда я попытался включить их в приложение, это не имело значения. Нужно ли также устанавливать флаг при запуске с использованием startActivity
?
в свойстве Manifest Activity вы можете указать этот параметр 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()
.
Это не гарантирует, что существует один экземпляр действия. Чтобы убедиться в этом, проверьте это: 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);
Затем в onPause()
Желаемая активность
Добавить finish()
,
Это помогло мне.
Это сработало для меня.
Intent intent = new Intent(this, MyActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
startActivity(intent);
Если экземпляр этой Activity уже существует, он будет перемещен в начало. Если экземпляр НЕ существует, будет создан новый экземпляр.
Intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK|Intent.FLAG_ACTIVITY_NO_HISTORY);
Это работает для меня:)