JesusS
JesusS

Reputation: 1665

Intent flags on Android

I have a widget for my application, which need to be somewhat independent from the app.

The activity workflow should be like this:

Widget -> Activity acting as receiver

Receiver -> LoginPage or Activity A (depending on login status)

LoginPage -> Activity A

Activity A onKeyDown -> Activity B

Activity B onKeyDown -> Home Screen.

I have no problem until Activity B, which sends back to Activity A when I press onKeyDown. I'm using FLAG_ACTIVITY_CLEAR_TOP flag and finishing the Activity when starting the activity B.

When I move from ActivityA to ActivityB using the CLEAR_TOP flag, I supposed that Activity stack is cleared, then in ActivityB I finish the Activity on the onKeyDown() method, assuming that the App will be closed, but it doesnt. Why?

I'm also trying to use FLAG_ACTIVITY_CLEAR_TASK and FLAG_ACTIVITY_NEW_TASK in the receiver but I dont understand the mechanism pretty much. Any idea about this?

Upvotes: 0

Views: 1309

Answers (2)

vinod
vinod

Reputation: 558

@JesusS: I doubt if u can finish ur activity in that fashion during a forward transition.

Consider a scenario of moving from Activity A to Activity B. Now if u want to kill Activity A and want to move to Activity B then call the startActivity(intent); (where ur moving from activity A to B) without any flags on the intent followed by the finish() on activity A.

As per my understanding u can use Intent.FLAG_ACTIVITY_CLEAR_TOP only during backward transition i.e when u already have that activity on the stack.

Consider the following scenario:

A --> B --> C --> D

Now if u want to move back from activity D to Activity A by clearing the activities u can go for Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP.

The result is that the Activities D, C, B(LIFO) will be removed from the stack and the activity A resumes by calling the onResume() of Activity A.

Upvotes: 1

Anis BEN NSIR
Anis BEN NSIR

Reputation: 2555

In fact the FLAG_ACTIVITY_CLEAR_TOP, start your activity B if its not started or it came back as the second activity on the BackStack. To finish Activity A, you can call finish() after starting Activity B or add no history flag, when starting A.

Upvotes: 1

Related Questions