Предотвратить открытие деятельности несколько раз

У меня есть общее меню в моем приложении с иконками. Нажав на иконку, вы начнете деятельность. Есть ли способ узнать, выполняется ли какое-либо действие, и предотвратить его запуск несколько раз (или из нескольких записей)? Также можно ли вывести активность, находящуюся в состоянии 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"
}
Другие вопросы по тегам