Android: How do I avoid starting activity which is already in stack?

Lets try to explain my question: I got an application and a service. The application is started with activity A. The service sends a broadcast that will let the application start Activity B Now the user starts activity C.

Now the service wants to start activity B again. But how do I let him know that the activity is still on the stack, or is there an intent flag for this?

How do I avoid that it will launch activity B because its already in the stack?


Solution 1:

I think you need to make your activity B singleInstance that if it's already create you don't want to create again, that is launch mode of the activity can be defined in manifest android:launchMode that defines how the activity will be instanciated.

in your case use android:launchMode="singleInstance"

Solution 2:

You can use flag Intent.FLAG_ACTIVITY_NEW_TASK. If the activity is already running it will bring that to front instead of creating new activity.

If you add Intent.FLAG_ACTIVITY_CLEAR_TOP with this, then all the activities after this activity in the backstack will be cleared.

Solution 3:

If the activity will be on the top if already started, set the FLAG_ACTIVITY_SINGLE_TOP flag

intent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
mContext.startActivity(intent);