Предотвратить открытие активности несколько раз - PullRequest
20 голосов
/ 18 января 2012

У меня в приложении есть общее меню с иконками.Нажав на иконку, вы начнете деятельность.Есть ли способ узнать, выполняется ли какое-либо действие, и предотвратить его запуск несколько раз (или из нескольких записей)?Также можно ли вывести активность, находящуюся в состоянии onPause, на передний план?

Ответы [ 7 ]

38 голосов
/ 18 января 2012

Используйте это:

intent.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);

при запуске Activity.

из документации :

Если установить в намерении, переданном Context.startActivity (), этот флаг будет заставить запущенную деятельность быть доведенной до ее задачи стек истории, если он уже запущен.

15 голосов
/ 18 января 2012

В декларации активности в файле манифеста добавьте тег android:launchMode="singleInstance"

3 голосов
/ 03 августа 2017

Я отлично сработал, выполнив следующее. В активности вызывающего абонента или в сервисе (даже из другого приложения)

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"
            >
1 голос
/ 20 сентября 2016

Добавьте это к вашему Activity определению в Androidmanifest.xml ...

android:launchMode = "singleInstance"
0 голосов
/ 19 мая 2017

пожалуйста, добавьте это в файл описания

<activity
android:name=".ui.modules.profile.activity.EditProfileActivity"
android:launchMode="singleTask" // <<this is Important line 
/>
0 голосов
/ 25 октября 2016

Просто используйте

Intent i = new Intent(ActivityA.this, ActivityB.class);
i.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
startActivity(i);
0 голосов
/ 18 января 2012

создайте экземпляр своей деятельности, который вы не хотите запускать несколько раз, например

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"
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...