Предотвратить открытие деятельности несколько раз
У меня есть общее меню в моем приложении с иконками. Нажав на иконку, вы начнете деятельность. Есть ли способ узнать, выполняется ли какое-либо действие, и предотвратить его запуск несколько раз (или из нескольких записей)? Также можно ли вывести активность, находящуюся в состоянии onPause, на передний план?
7 ответов
Использовать этот:
intent.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
во время запуска Activity
,
из документации:
Если этот параметр установлен в намерении, переданном в Context.startActivity(), этот флаг приведет к тому, что запущенное действие будет перенесено в начало стека истории его задачи, если оно уже выполняется.
В декларации своей активности в файле манифеста добавьте тег android:launchMode="singleInstance"
Я отлично сработал, выполнив следующее. В деятельности вызывающего абонента или в службе (даже из другого приложения)
Intent launchIntent = getPackageManager().getLaunchIntentForPackage(APP_PACKAGE_NAME);
//the previous line can be replaced by the normal Intent that has the activity name Intent launchIntent = new Intent(ActivityA.this, ActivityB.class);
launchIntent.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT|Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(launchIntent);
и в манифесте активности получателя (я хочу предотвратить открытие дважды)
<activity android:name=".MainActivity"
android:launchMode="singleTask"
>
Добавьте это к вашему Activity
определение в Androidmanifest.xml
...
android:launchMode = "singleInstance"
Это работает для меня:
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
Если установлено, и запускаемое действие уже выполняется в текущей задаче, то вместо запуска нового экземпляра этого действия все другие действия поверх него будут закрыты, и это намерение будет доставлено в (сейчас на вверху) старая активность как новое намерение.
также вы можете использовать FLAG_ACTIVITY_NEW_TASK
с этим.
тогда код будет:
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK);
Просто используйте
Intent i = new Intent(ActivityA.this, ActivityB.class);
i.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
startActivity(i);
Пожалуйста, добавьте это в файл menifest
<activity
android:name=".ui.modules.profile.activity.EditProfileActivity"
android:launchMode="singleTask" // <<this is Important line
/>
Создать экземпляр вашей деятельности, который вы не хотите запускать несколько раз, как
Class ExampleA extends Activity {
public static Activity classAinstance = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
classAinstance = this;
}
}
Теперь, где бы вы ни захотели провести перекрестную проверку, я имею в виду, чтобы она не запускалась несколько раз, проверьте это
if(ExampleA.classAinstance == null) {
"Then only start your activity"
}